Ignore:
Timestamp:
Apr 12, 2018 2:47:44 PM (6 years ago)
Author:
suehring
Message:

Minor revision of static input file checks, bugfix in initialization of surface-fractions in LSM; minor bugfix in initialization of albedo at window-surfaces; for clearer access of albedo and emissivity introduce index for vegetation/wall, pavement/green-wall and water/window surfaces

File:
1 edited

Legend:

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

    r2938 r2963  
    2525! -----------------
    2626! $Id$
     27! - In initialization of surface types, consider the case that surface_fractions
     28!   is not given in static input file.
     29! - Introduce index for vegetation/wall, pavement/green-wall and water/window
     30!   surfaces, for clearer access of surface fraction, albedo, emissivity, etc. .
     31!
     32! 2938 2018-03-27 15:52:42Z suehring
    2733! Initialization of soil moisture and temperature via Inifor-provided data also
    2834! in nested child domains, even if no dynamic input file is available for
     
    416422
    417423    USE surface_mod,                                                           &
    418         ONLY :  surf_lsm_h, surf_lsm_v, surf_type, surface_restore_elements
     424        ONLY :  ind_pav_green, ind_veg_wall, ind_wat_win, surf_lsm_h,          &
     425                surf_lsm_v, surf_type, surface_restore_elements
    419426
    420427    IMPLICIT NONE
     
    711718                                   'pond        ',                   & ! 4
    712719                                   'fountain    '                    & ! 5
    713                                                                   /)                                                                 
    714 !
    715 !-- IDs for vegetation, pavement and water surfaces
    716     INTEGER(iwp) ::  ind_veg = 0    !< index for vegetation surfaces, used to assess surface-fraction, albedo, etc.     
    717     INTEGER(iwp) ::  ind_pav = 1    !< index for pavement surfaces, used to assess surface-fraction, albedo, etc.       
    718     INTEGER(iwp) ::  ind_wat = 2    !< index for vegetation surfaces, used to assess surface-fraction, albedo, etc.                         
     720                                                                  /)                                                                                 
    719721                   
    720722!
     
    25602562         
    25612563             surf_lsm_h%vegetation_surface = .TRUE.
    2562              surf_lsm_h%frac(ind_veg,:) = 1.0_wp
     2564             surf_lsm_h%frac(ind_veg_wall,:) = 1.0_wp
    25632565             DO  l = 0, 3
    25642566                surf_lsm_v(l)%vegetation_surface = .TRUE.
    2565                 surf_lsm_v(l)%frac(ind_veg,:) = 1.0_wp
     2567                surf_lsm_v(l)%frac(ind_veg_wall,:) = 1.0_wp
    25662568             ENDDO
    25672569   
     
    25692571             
    25702572             surf_lsm_h%water_surface = .TRUE.
    2571              surf_lsm_h%frac(ind_wat,:) = 1.0_wp
     2573             surf_lsm_h%frac(ind_wat_win,:) = 1.0_wp
    25722574!
    25732575!--          Note, vertical water surface does not really make sense.
    25742576             DO  l = 0, 3 
    25752577                surf_lsm_v(l)%water_surface   = .TRUE.
    2576                 surf_lsm_v(l)%frac(ind_wat,:) = 1.0_wp
     2578                surf_lsm_v(l)%frac(ind_wat_win,:) = 1.0_wp
    25772579             ENDDO
    25782580
     
    25802582             
    25812583             surf_lsm_h%pavement_surface = .TRUE.
    2582                 surf_lsm_h%frac(ind_pav,:) = 1.0_wp
     2584                surf_lsm_h%frac(ind_pav_green,:) = 1.0_wp
    25832585             DO  l = 0, 3
    25842586                surf_lsm_v(l)%pavement_surface   = .TRUE.
    2585                 surf_lsm_v(l)%frac(ind_pav,:) = 1.0_wp
     2587                surf_lsm_v(l)%frac(ind_pav_green,:) = 1.0_wp
    25862588             ENDDO
    25872589
     
    26312633!--    In case of netcdf input file, further initialize surface fractions.
    26322634!--    At the moment only 1 surface is given at a location, so that the fraction
    2633 !--    is either 0 or 1. This will be revised later.
    2634        IF ( input_pids_static )  THEN
     2635!--    is either 0 or 1. This will be revised later. If surface fraction
     2636!--    is not given in static input file, relative fractions will be derived
     2637!--    from given surface type. In this case, only 1 type is given at a certain
     2638!--    location (already checked). 
     2639       IF ( input_pids_static  .AND.  surface_fraction_f%from_file )  THEN
    26352640          DO  m = 1, surf_lsm_h%ns
    26362641             i = surf_lsm_h%i(m)
     
    26382643!
    26392644!--          0 - vegetation fraction, 1 - pavement fraction, 2 - water fraction             
    2640              surf_lsm_h%frac(ind_veg,m) = surface_fraction_f%frac(ind_veg,j,i)         
    2641              surf_lsm_h%frac(ind_pav,m) = surface_fraction_f%frac(ind_pav,j,i)       
    2642              surf_lsm_h%frac(ind_wat,m) = surface_fraction_f%frac(ind_wat,j,i)
     2645             surf_lsm_h%frac(ind_veg_wall,m)  =                                &
     2646                                    surface_fraction_f%frac(ind_veg_wall,j,i)         
     2647             surf_lsm_h%frac(ind_pav_green,m) =                                &
     2648                                    surface_fraction_f%frac(ind_pav_green,j,i)       
     2649             surf_lsm_h%frac(ind_wat_win,m)   =                                &
     2650                                    surface_fraction_f%frac(ind_wat_win,j,i)
    26432651
    26442652          ENDDO
     
    26512659!
    26522660!--             0 - vegetation fraction, 1 - pavement fraction, 2 - water fraction       
    2653                 surf_lsm_v(l)%frac(ind_veg,m) = surface_fraction_f%frac(ind_veg,j,i)         
    2654                 surf_lsm_v(l)%frac(ind_pav,m) = surface_fraction_f%frac(ind_pav,j,i)       
    2655                 surf_lsm_v(l)%frac(ind_wat,m) = surface_fraction_f%frac(ind_wat,j,i)
    2656 
     2661                surf_lsm_v(l)%frac(ind_veg_wall,m)  =                          &
     2662                                    surface_fraction_f%frac(ind_veg_wall,j,i)         
     2663                surf_lsm_v(l)%frac(ind_pav_green,m) =                          &
     2664                                    surface_fraction_f%frac(ind_pav_green,j,i)       
     2665                surf_lsm_v(l)%frac(ind_wat_win,m)   =                          &
     2666                                    surface_fraction_f%frac(ind_wat_win,j,i)
     2667
     2668             ENDDO
     2669          ENDDO
     2670       ELSEIF ( input_pids_static  .AND.  .NOT. surface_fraction_f%from_file ) &
     2671       THEN
     2672          DO  m = 1, surf_lsm_h%ns
     2673             i = surf_lsm_h%i(m)
     2674             j = surf_lsm_h%j(m)
     2675
     2676             IF ( vegetation_type_f%var(j,i) /= vegetation_type_f%fill )       &       
     2677                surf_lsm_h%frac(ind_veg_wall,m)  = 1.0_wp
     2678             IF ( pavement_type_f%var(j,i)   /= pavement_type_f%fill   )       &       
     2679                surf_lsm_h%frac(ind_pav_green,m) = 1.0_wp
     2680             IF ( water_type_f%var(j,i)      /= water_type_f%fill      )       &       
     2681                surf_lsm_h%frac(ind_wat_win,m)   = 1.0_wp       
     2682          ENDDO
     2683          DO  l = 0, 3
     2684             DO  m = 1, surf_lsm_v(l)%ns
     2685                i = surf_lsm_v(l)%i(m) + MERGE( 0, surf_lsm_v(l)%ioff,         &
     2686                                                surf_lsm_v(l)%building_covered(m) )
     2687                j = surf_lsm_v(l)%j(m) + MERGE( 0, surf_lsm_v(l)%joff,         &
     2688                                                surf_lsm_v(l)%building_covered(m) )
     2689     
     2690                IF ( vegetation_type_f%var(j,i) /= vegetation_type_f%fill )    &       
     2691                   surf_lsm_v(l)%frac(ind_veg_wall,m)  = 1.0_wp
     2692                IF ( pavement_type_f%var(j,i)   /= pavement_type_f%fill   )    &       
     2693                   surf_lsm_v(l)%frac(ind_pav_green,m) = 1.0_wp
     2694                IF ( water_type_f%var(j,i)      /= water_type_f%fill      )    &       
     2695                   surf_lsm_v(l)%frac(ind_wat_win,m)   = 1.0_wp     
    26572696             ENDDO
    26582697          ENDDO
     
    30163055             surf_lsm_h%f_sw_in(m)          = f_shortwave_incoming
    30173056             surf_lsm_h%c_surface(m)        = c_surface
    3018              surf_lsm_h%albedo_type(ind_veg,m) = albedo_type
    3019              surf_lsm_h%emissivity(ind_veg,m)  = emissivity
     3057             surf_lsm_h%albedo_type(ind_veg_wall,m) = albedo_type
     3058             surf_lsm_h%emissivity(ind_veg_wall,m)  = emissivity
    30203059          ELSE
    30213060             surf_lsm_h%lai(m)   = 0.0_wp
     
    30423081                surf_lsm_v(l)%f_sw_in(m)          = f_shortwave_incoming
    30433082                surf_lsm_v(l)%c_surface(m)        = c_surface
    3044                 surf_lsm_v(l)%albedo_type(ind_veg,m) = albedo_type
    3045                 surf_lsm_v(l)%emissivity(ind_veg,m)  = emissivity
     3083                surf_lsm_v(l)%albedo_type(ind_veg_wall,m) = albedo_type
     3084                surf_lsm_v(l)%emissivity(ind_veg_wall,m)  = emissivity
    30463085             ELSE
    30473086                surf_lsm_v(l)%lai(m)   = 0.0_wp
     
    30773116                surf_lsm_h%f_sw_in(m)          = vegetation_pars(ind_v_f_sw_in,st)
    30783117                surf_lsm_h%c_surface(m)        = vegetation_pars(ind_v_c_surf,st)
    3079                 surf_lsm_h%albedo_type(ind_veg,m) = INT( vegetation_pars(ind_v_at,st) )
    3080                 surf_lsm_h%emissivity(ind_veg,m)  = vegetation_pars(ind_v_emis,st)
     3118                surf_lsm_h%albedo_type(ind_veg_wall,m) = INT( vegetation_pars(ind_v_at,st) )
     3119                surf_lsm_h%emissivity(ind_veg_wall,m)  = vegetation_pars(ind_v_emis,st)
    30813120             ENDIF
    30823121          ENDDO
     
    31033142                   surf_lsm_v(l)%f_sw_in(m)          = vegetation_pars(ind_v_f_sw_in,st)
    31043143                   surf_lsm_v(l)%c_surface(m)        = vegetation_pars(ind_v_c_surf,st)
    3105                    surf_lsm_v(l)%albedo_type(ind_veg,m) = INT( vegetation_pars(ind_v_at,st) )
    3106                    surf_lsm_v(l)%emissivity(ind_veg,m)  = vegetation_pars(ind_v_emis,st)
     3144                   surf_lsm_v(l)%albedo_type(ind_veg_wall,m) = INT( vegetation_pars(ind_v_at,st) )
     3145                   surf_lsm_v(l)%emissivity(ind_veg_wall,m)  = vegetation_pars(ind_v_emis,st)
    31073146                ENDIF
    31083147             ENDDO
     
    31793218                IF ( vegetation_pars_f%pars_xy(ind_v_at,j,i) /=                &
    31803219                     vegetation_pars_f%fill )                                  &
    3181                    surf_lsm_h%albedo_type(ind_veg,m) =                         &
     3220                   surf_lsm_h%albedo_type(ind_veg_wall,m) =                    &
    31823221                                   INT( vegetation_pars_f%pars_xy(ind_v_at,j,i) )
    31833222                IF ( vegetation_pars_f%pars_xy(ind_v_emis,j,i) /=              &
    31843223                     vegetation_pars_f%fill )                                  &
    3185                    surf_lsm_h%emissivity(ind_veg,m)  =                         &
     3224                   surf_lsm_h%emissivity(ind_veg_wall,m)  =                    &
    31863225                                   vegetation_pars_f%pars_xy(ind_v_emis,j,i)
    31873226             ENDIF
     
    32553294                   IF ( vegetation_pars_f%pars_xy(ind_v_at,j,i) /=             &
    32563295                        vegetation_pars_f%fill )                               &
    3257                       surf_lsm_v(l)%albedo_type(ind_veg,m) =                   &
     3296                      surf_lsm_v(l)%albedo_type(ind_veg_wall,m) =              &
    32583297                                   INT( vegetation_pars_f%pars_xy(ind_v_at,j,i) )
    32593298                   IF ( vegetation_pars_f%pars_xy(ind_v_emis,j,i) /=           &
    32603299                        vegetation_pars_f%fill )                               &
    3261                       surf_lsm_v(l)%emissivity(ind_veg,m)  =                   &
     3300                      surf_lsm_v(l)%emissivity(ind_veg_wall,m)  =              &
    32623301                                   vegetation_pars_f%pars_xy(ind_v_emis,j,i)
    32633302                ENDIF
     
    33053344             surf_lsm_h%lambda_surface_u(m) = 1.0E10_wp               
    33063345             surf_lsm_h%c_surface(m)        = 0.0_wp
    3307              surf_lsm_h%albedo_type(ind_wat,m) = albedo_type
    3308              surf_lsm_h%emissivity(ind_wat,m)  = emissivity
     3346             surf_lsm_h%albedo_type(ind_wat_win,m) = albedo_type
     3347             surf_lsm_h%emissivity(ind_wat_win,m)  = emissivity
    33093348          ENDIF
    33103349       ENDDO
     
    33233362                surf_lsm_v(l)%lambda_surface_u(m) = 1.0E10_wp               
    33243363                surf_lsm_v(l)%c_surface(m)        = 0.0_wp
    3325                 surf_lsm_v(l)%albedo_type(ind_wat,m) = albedo_type
    3326                 surf_lsm_v(l)%emissivity(ind_wat,m)  = emissivity
     3364                surf_lsm_v(l)%albedo_type(ind_wat_win,m) = albedo_type
     3365                surf_lsm_v(l)%emissivity(ind_wat_win,m)  = emissivity
    33273366             ENDIF
    33283367          ENDDO
     
    33533392                surf_lsm_h%lambda_surface_u(m) = water_pars(ind_w_lambda_u,st)             
    33543393                surf_lsm_h%c_surface(m)        = 0.0_wp
    3355                 surf_lsm_h%albedo_type(ind_wat,m) = INT( water_pars(ind_w_at,st) )
    3356                 surf_lsm_h%emissivity(ind_wat,m)  = water_pars(ind_w_emis,st)
     3394                surf_lsm_h%albedo_type(ind_wat_win,m) = INT( water_pars(ind_w_at,st) )
     3395                surf_lsm_h%emissivity(ind_wat_win,m)  = water_pars(ind_w_emis,st)
    33573396             ENDIF
    33583397          ENDDO
     
    33783417                                                   water_pars(ind_w_lambda_u,st)           
    33793418                   surf_lsm_v(l)%c_surface(m)     = 0.0_wp
    3380                    surf_lsm_v(l)%albedo_type(ind_wat,m) =                      &
     3419                   surf_lsm_v(l)%albedo_type(ind_wat_win,m) =                  &
    33813420                                                  INT( water_pars(ind_w_at,st) )
    3382                    surf_lsm_v(l)%emissivity(ind_wat,m)  =                      &
     3421                   surf_lsm_v(l)%emissivity(ind_wat_win,m)  =                  &
    33833422                                                  water_pars(ind_w_emis,st)
    33843423                ENDIF
     
    34343473                IF ( water_pars_f%pars_xy(ind_w_at,j,i) /=                     &
    34353474                     water_pars_f%fill )                                       &
    3436                    surf_lsm_h%albedo_type(ind_wat,m) =                         &
     3475                   surf_lsm_h%albedo_type(ind_wat_win,m) =                     &
    34373476                                       INT( water_pars_f%pars_xy(ind_w_at,j,i) )
    34383477
    34393478                IF ( water_pars_f%pars_xy(ind_w_emis,j,i) /=                   &
    34403479                     water_pars_f%fill )                                       &
    3441                    surf_lsm_h%emissivity(ind_wat,m) =                          &
     3480                   surf_lsm_h%emissivity(ind_wat_win,m) =                      &
    34423481                   water_pars_f%pars_xy(ind_w_emis,j,i) 
    34433482             ENDIF
     
    34943533                   IF ( water_pars_f%pars_xy(ind_w_at,j,i) /=                  &
    34953534                        water_pars_f%fill )                                    &
    3496                       surf_lsm_v(l)%albedo_type(ind_wat,m)    =                &
     3535                      surf_lsm_v(l)%albedo_type(ind_wat_win,m) =               &
    34973536                                      INT( water_pars_f%pars_xy(ind_w_at,j,i) )
    34983537
    34993538                   IF ( water_pars_f%pars_xy(ind_w_emis,j,i) /=                &
    35003539                        water_pars_f%fill )                                    &
    3501                       surf_lsm_v(l)%emissivity(ind_wat,m)     =                &
     3540                      surf_lsm_v(l)%emissivity(ind_wat_win,m)  =               &
    35023541                                      water_pars_f%pars_xy(ind_w_emis,j,i) 
    35033542                ENDIF
     
    35763615                                                        * 0.25_wp                                   
    35773616
    3578              surf_lsm_h%albedo_type(ind_pav,m) = albedo_type
    3579              surf_lsm_h%emissivity(ind_pav,m)  = emissivity     
     3617             surf_lsm_h%albedo_type(ind_pav_green,m) = albedo_type
     3618             surf_lsm_h%emissivity(ind_pav_green,m)  = emissivity     
    35803619     
    35813620             IF ( pavement_type /= 0 )  THEN
     
    36113650                                                        * 0.25_wp                                     
    36123651
    3613                 surf_lsm_v(l)%albedo_type(ind_pav,m) = albedo_type
    3614                 surf_lsm_v(l)%emissivity(ind_pav,m)  = emissivity
     3652                surf_lsm_v(l)%albedo_type(ind_pav_green,m) = albedo_type
     3653                surf_lsm_v(l)%emissivity(ind_pav_green,m)  = emissivity
    36153654
    36163655                IF ( pavement_type /= 0 )  THEN
     
    36683707                                                        * dz_soil(nzb_soil)    &
    36693708                                                        * 0.25_wp                               
    3670                 surf_lsm_h%albedo_type(ind_pav,m) = INT( pavement_pars(ind_p_at,st) )
    3671                 surf_lsm_h%emissivity(ind_pav,m)  = pavement_pars(ind_p_emis,st) 
     3709                surf_lsm_h%albedo_type(ind_pav_green,m) = INT( pavement_pars(ind_p_at,st) )
     3710                surf_lsm_h%emissivity(ind_pav_green,m)  = pavement_pars(ind_p_emis,st) 
    36723711
    36733712                DO  k = nzb_soil, surf_lsm_h%nzt_pavement(m)
     
    37183757                                                        * dz_soil(nzb_soil)    &
    37193758                                                        * 0.25_wp                                   
    3720                    surf_lsm_v(l)%albedo_type(ind_pav,m) =                      &
     3759                   surf_lsm_v(l)%albedo_type(ind_pav_green,m) =                &
    37213760                                              INT( pavement_pars(ind_p_at,st) )
    3722                    surf_lsm_v(l)%emissivity(ind_pav,m)  =                      &
     3761                   surf_lsm_v(l)%emissivity(ind_pav_green,m)  =                &
    37233762                                              pavement_pars(ind_p_emis,st)   
    37243763
    37253764                   DO  k = nzb_soil, surf_lsm_h%nzt_pavement(m)
    3726                       surf_lsm_v(l)%lambda_h_def(k,m)    =                    &
     3765                      surf_lsm_v(l)%lambda_h_def(k,m)    =                     &
    37273766                                    pavement_subsurface_pars_1(k,pavement_type)                       
    3728                       surf_lsm_v(l)%rho_c_total_def(k,m) =                    &
     3767                      surf_lsm_v(l)%rho_c_total_def(k,m) =                     &
    37293768                                    pavement_subsurface_pars_2(k,pavement_type)
    37303769                   ENDDO   
     
    37843823                IF ( pavement_pars_f%pars_xy(ind_p_at,j,i) /=                  &
    37853824                     pavement_pars_f%fill )                                    &
    3786                    surf_lsm_h%albedo_type(ind_pav,m) =                         &
     3825                   surf_lsm_h%albedo_type(ind_pav_green,m) =                   &
    37873826                                              INT( pavement_pars(ind_p_at,st) )
    37883827                IF ( pavement_pars_f%pars_xy(ind_p_emis,j,i) /=                &
    37893828                     pavement_pars_f%fill )                                    &
    3790                    surf_lsm_h%emissivity(ind_pav,m)  =                         &
     3829                   surf_lsm_h%emissivity(ind_pav_green,m)  =                   &
    37913830                                              pavement_pars(ind_p_emis,st)
    37923831             ENDIF
     
    38443883                   IF ( pavement_pars_f%pars_xy(ind_p_at,j,i) /=               &
    38453884                        pavement_pars_f%fill )                                 &
    3846                       surf_lsm_v(l)%albedo_type(ind_pav,m) =                   &
     3885                      surf_lsm_v(l)%albedo_type(ind_pav_green,m) =             &
    38473886                                            INT( pavement_pars(ind_p_at,st) )
    38483887
    38493888                   IF ( pavement_pars_f%pars_xy(ind_p_emis,j,i) /=             &
    38503889                        pavement_pars_f%fill )                                 &
    3851                       surf_lsm_v(l)%emissivity(ind_pav,m)  =                   &
     3890                      surf_lsm_v(l)%emissivity(ind_pav_green,m)  =             &
    38523891                                            pavement_pars(ind_p_emis,st) 
    38533892                ENDIF
Note: See TracChangeset for help on using the changeset viewer.