Changeset 3222 for palm/trunk


Ignore:
Timestamp:
Aug 30, 2018 1:35:35 PM (6 years ago)
Author:
suehring
Message:

Introduction of addtional surface variables indicating type and name of the surface elements; Bugfix in LSM

Location:
palm/trunk/SOURCE
Files:
3 edited

Legend:

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

    r3215 r3222  
    2525! -----------------
    2626! $Id$
     27! - Introduction of surface array for type and its names
     28! - Bugfix in intialization of pavement surfaces
     29!
     30! 3215 2018-08-29 09:58:59Z suehring
    2731! Enable optional initialization of soil properties directly from dynamic
    2832! input file.
     
    26002604
    26012605             surf_lsm_v(l)%lambda_w = 0.0_wp
    2602           ENDIF      
     2606          ENDIF     
    26032607       ENDDO
    26042608!
     
    26312635          ALLOCATE( surf_lsm_v(l)%building_covered(1:surf_lsm_v(l)%ns) )
    26322636       ENDDO
     2637!
     2638!--    Allocate arrays for the respective types and their names on the surface
     2639!--    elements. This will be required to treat deposition of chemical species.
     2640       ALLOCATE( surf_lsm_h%pavement_type(1:surf_lsm_h%ns)   )
     2641       ALLOCATE( surf_lsm_h%vegetation_type(1:surf_lsm_h%ns) )
     2642       ALLOCATE( surf_lsm_h%water_type(1:surf_lsm_h%ns)      )
     2643       
     2644       surf_lsm_h%pavement_type   = 0
     2645       surf_lsm_h%vegetation_type = 0
     2646       surf_lsm_h%water_type      = 0
     2647       
     2648       ALLOCATE( surf_lsm_h%pavement_type_name(1:surf_lsm_h%ns)   )
     2649       ALLOCATE( surf_lsm_h%vegetation_type_name(1:surf_lsm_h%ns) )
     2650       ALLOCATE( surf_lsm_h%water_type_name(1:surf_lsm_h%ns)      )
     2651       
     2652       surf_lsm_h%pavement_type_name   = 'none'
     2653       surf_lsm_h%vegetation_type_name = 'none'
     2654       surf_lsm_h%water_type_name      = 'none'
     2655       
     2656       DO  l = 0, 3
     2657          ALLOCATE( surf_lsm_v(l)%pavement_type(1:surf_lsm_v(l)%ns)   )
     2658          ALLOCATE( surf_lsm_v(l)%vegetation_type(1:surf_lsm_v(l)%ns) )
     2659          ALLOCATE( surf_lsm_v(l)%water_type(1:surf_lsm_v(l)%ns)      )
     2660         
     2661          surf_lsm_v(l)%pavement_type   = 0
     2662          surf_lsm_v(l)%vegetation_type = 0
     2663          surf_lsm_v(l)%water_type      = 0
     2664       
     2665          ALLOCATE( surf_lsm_v(l)%pavement_type_name(1:surf_lsm_v(l)%ns)   )
     2666          ALLOCATE( surf_lsm_v(l)%vegetation_type_name(1:surf_lsm_v(l)%ns) )
     2667          ALLOCATE( surf_lsm_v(l)%water_type_name(1:surf_lsm_v(l)%ns)      )
     2668       
     2669          surf_lsm_v(l)%pavement_type_name   = 'none'
     2670          surf_lsm_v(l)%vegetation_type_name = 'none'
     2671          surf_lsm_v(l)%water_type_name      = 'none'       
     2672       ENDDO
     2673       
    26332674!
    26342675!--    Set flag parameter for the prescribed surface type depending on user
     
    31343175             surf_lsm_h%albedo_type(ind_veg_wall,m) = albedo_type
    31353176             surf_lsm_h%emissivity(ind_veg_wall,m)  = emissivity
     3177             
     3178             surf_lsm_h%vegetation_type(m)      = vegetation_type
     3179             surf_lsm_h%vegetation_type_name(m) = vegetation_type_name(vegetation_type)
    31363180          ELSE
    31373181             surf_lsm_h%lai(m)   = 0.0_wp
     
    31603204                surf_lsm_v(l)%albedo_type(ind_veg_wall,m) = albedo_type
    31613205                surf_lsm_v(l)%emissivity(ind_veg_wall,m)  = emissivity
     3206               
     3207                surf_lsm_v(l)%vegetation_type(m)      = vegetation_type
     3208                surf_lsm_v(l)%vegetation_type_name(m) = vegetation_type_name(vegetation_type)
    31623209             ELSE
    31633210                surf_lsm_v(l)%lai(m)   = 0.0_wp
     
    31953242                surf_lsm_h%albedo_type(ind_veg_wall,m) = INT( vegetation_pars(ind_v_at,st) )
    31963243                surf_lsm_h%emissivity(ind_veg_wall,m)  = vegetation_pars(ind_v_emis,st)
     3244               
     3245                surf_lsm_h%vegetation_type(m)      = st
     3246                surf_lsm_h%vegetation_type_name(m) = vegetation_type_name(st)
    31973247             ENDIF
    31983248          ENDDO
     
    32213271                   surf_lsm_v(l)%albedo_type(ind_veg_wall,m) = INT( vegetation_pars(ind_v_at,st) )
    32223272                   surf_lsm_v(l)%emissivity(ind_veg_wall,m)  = vegetation_pars(ind_v_emis,st)
     3273                   
     3274                   surf_lsm_v(l)%vegetation_type(m)      = st
     3275                   surf_lsm_v(l)%vegetation_type_name(m) = vegetation_type_name(st)
    32233276                ENDIF
    32243277             ENDDO
     
    34233476             surf_lsm_h%albedo_type(ind_wat_win,m) = albedo_type
    34243477             surf_lsm_h%emissivity(ind_wat_win,m)  = emissivity
     3478             
     3479             surf_lsm_h%water_type(m)      = water_type
     3480             surf_lsm_h%water_type_name(m) = water_type_name(water_type)
    34253481          ENDIF
    34263482       ENDDO
     
    34413497                surf_lsm_v(l)%albedo_type(ind_wat_win,m) = albedo_type
    34423498                surf_lsm_v(l)%emissivity(ind_wat_win,m)  = emissivity
     3499               
     3500                surf_lsm_v(l)%water_type(m)      = water_type
     3501                surf_lsm_v(l)%water_type_name(m) = water_type_name(water_type)
    34433502             ENDIF
    34443503          ENDDO
     
    34713530                surf_lsm_h%albedo_type(ind_wat_win,m) = INT( water_pars(ind_w_at,st) )
    34723531                surf_lsm_h%emissivity(ind_wat_win,m)  = water_pars(ind_w_emis,st)
     3532               
     3533                surf_lsm_h%water_type(m)      = st
     3534                surf_lsm_h%water_type_name(m) = water_type_name(st)
    34733535             ENDIF
    34743536          ENDDO
     
    34983560                   surf_lsm_v(l)%emissivity(ind_wat_win,m)  =                  &
    34993561                                                  water_pars(ind_w_emis,st)
     3562                                                 
     3563                   surf_lsm_v(l)%water_type(m)      = st
     3564                   surf_lsm_v(l)%water_type_name(m) = water_type_name(st)
    35003565                ENDIF
    35013566             ENDDO
     
    36943759             surf_lsm_h%albedo_type(ind_pav_green,m) = albedo_type
    36953760             surf_lsm_h%emissivity(ind_pav_green,m)  = emissivity     
     3761             
     3762             surf_lsm_h%pavement_type(m)      = pavement_type
     3763             surf_lsm_h%pavement_type_name(m) = pavement_type_name(pavement_type)
    36963764     
    36973765             IF ( pavement_type /= 0 )  THEN
     
    37033771                ENDDO
    37043772             ELSE
    3705                 surf_lsm_v(l)%lambda_h_def(:,m)     = pavement_heat_conduct
    3706                 surf_lsm_v(l)%rho_c_total_def(:,m)  = pavement_heat_capacity
     3773                surf_lsm_h%lambda_h_def(:,m)     = pavement_heat_conduct
     3774                surf_lsm_h%rho_c_total_def(:,m)  = pavement_heat_capacity
    37073775             ENDIF       
    37083776          ENDIF
     
    37293797                surf_lsm_v(l)%albedo_type(ind_pav_green,m) = albedo_type
    37303798                surf_lsm_v(l)%emissivity(ind_pav_green,m)  = emissivity
     3799               
     3800                surf_lsm_v(l)%pavement_type(m)      = pavement_type
     3801                surf_lsm_v(l)%pavement_type_name(m) = pavement_type_name(pavement_type)
    37313802
    37323803                IF ( pavement_type /= 0 )  THEN
     
    37863857                surf_lsm_h%albedo_type(ind_pav_green,m) = INT( pavement_pars(ind_p_at,st) )
    37873858                surf_lsm_h%emissivity(ind_pav_green,m)  = pavement_pars(ind_p_emis,st) 
     3859               
     3860                surf_lsm_h%pavement_type(m)      = st
     3861                surf_lsm_h%pavement_type_name(m) = pavement_type_name(st)
    37883862
    37893863                DO  k = nzb_soil, surf_lsm_h%nzt_pavement(m)
     
    38373911                                              INT( pavement_pars(ind_p_at,st) )
    38383912                   surf_lsm_v(l)%emissivity(ind_pav_green,m)  =                &
    3839                                               pavement_pars(ind_p_emis,st)   
     3913                                              pavement_pars(ind_p_emis,st) 
     3914                                             
     3915                   surf_lsm_v(l)%pavement_type(m)      = st
     3916                   surf_lsm_v(l)%pavement_type_name(m) = pavement_type_name(st)
    38403917                                             
    38413918                   DO  k = nzb_soil, surf_lsm_v(l)%nzt_pavement(m)
  • palm/trunk/SOURCE/surface_mod.f90

    r3176 r3222  
    2626! -----------------
    2727! $Id$
     28! +building_type, pavement_type, vegetation_type, water_type
     29! +building_type_name, pavement_type_name, vegetation_type_name, water_type_name
     30!
     31! 3176 2018-07-26 17:12:48Z suehring
    2832! Bugfix in restarts for surface elements.
    2933!
     
    290294!
    291295!--    Variables required for LSM as well as for USM
    292        INTEGER(iwp), DIMENSION(:), ALLOCATABLE   ::  nzt_pavement  !< top index for pavement in soil
     296       CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE ::  building_type_name    !< building type name at surface element
     297       CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE ::  pavement_type_name    !< pavement type name at surface element
     298       CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE ::  vegetation_type_name  !< water type at name surface element
     299       CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE ::  water_type_name       !< water type at name surface element
     300       
     301       INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  nzt_pavement     !< top index for pavement in soil
     302       INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  building_type    !< building type at surface element
     303       INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  pavement_type    !< pavement type at surface element
     304       INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  vegetation_type  !< vegetation type at surface element
     305       INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  water_type       !< water type at surface element
     306       
    293307       INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  albedo_type   !< albedo type, for each fraction (wall,green,window or vegetation,pavement water)
    294308
     
    298312       LOGICAL, DIMENSION(:), ALLOCATABLE  ::  water_surface       !< flag parameter for water surfaces
    299313       LOGICAL, DIMENSION(:), ALLOCATABLE  ::  vegetation_surface  !< flag parameter for natural land surfaces
    300 
     314       
    301315       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  albedo            !< broadband albedo for each surface fraction (LSM: vegetation, water, pavement; USM: wall, green, window)
    302316       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  emissivity        !< emissivity of the surface, for each fraction  (LSM: vegetation, water, pavement; USM: wall, green, window)
  • palm/trunk/SOURCE/urban_surface_mod.f90

    r3203 r3222  
    2828! -----------------
    2929! $Id$
     30! Introduction of surface array for type and its name
     31!
     32! 3203 2018-08-23 10:48:36Z suehring
    3033! Revise bulk parameter for emissivity at ground-floor level
    3134!
     
    886889       
    887890!--     allocate array of wall types and wall parameters
    888         ALLOCATE ( surf_usm_h%surface_types(1:surf_usm_h%ns) )
     891        ALLOCATE ( surf_usm_h%surface_types(1:surf_usm_h%ns)      )
     892        ALLOCATE ( surf_usm_h%building_type(1:surf_usm_h%ns)      )
     893        ALLOCATE ( surf_usm_h%building_type_name(1:surf_usm_h%ns) )
     894        surf_usm_h%building_type = 0
     895        surf_usm_h%building_type = 'none'
    889896        DO  l = 0, 3
    890897           ALLOCATE( surf_usm_v(l)%surface_types(1:surf_usm_v(l)%ns) )
     898           ALLOCATE ( surf_usm_v(l)%building_type(1:surf_usm_v(l)%ns)      )
     899           ALLOCATE ( surf_usm_v(l)%building_type_name(1:surf_usm_v(l)%ns) )
     900           surf_usm_v(l)%building_type = 0
     901           surf_usm_v(l)%building_type = 'none'
    891902        ENDDO
    892903!
     
    37523763                                     surf_usm_h%ground_level(m) )
    37533764!
     3765!--        Store building type and its name on each surface element
     3766           surf_usm_h%building_type(m)      = building_type
     3767           surf_usm_h%building_type_name(m) = building_type_name(building_type)
     3768!
    37543769!--        Initialize relatvie wall- (0), green- (1) and window (2) fractions
    37553770           surf_usm_h%frac(ind_veg_wall,m)  = building_pars(ind_wall_frac,building_type)   
     
    38693884              ind_z0qh         = MERGE( ind_z0qh_gfl,         ind_z0qh_agfl,         &
    38703885                                        surf_usm_v(l)%ground_level(m) )
    3871 
     3886!
     3887!--           Store building type and its name on each surface element
     3888              surf_usm_v(l)%building_type(m)      = building_type
     3889              surf_usm_v(l)%building_type_name(m) = building_type_name(building_type)
    38723890!
    38733891!--           Initialize relatvie wall- (0), green- (1) and window (2) fractions
     
    39994017                 ind_z0qh         = MERGE( ind_z0qh_gfl,         ind_z0qh_agfl,         &
    40004018                                           surf_usm_h%ground_level(m) )
    4001 
     4019!
     4020!--              Store building type and its name on each surface element
     4021                 surf_usm_h%building_type(m)      = st
     4022                 surf_usm_h%building_type_name(m) = building_type_name(st)
    40024023!
    40034024!--              Initialize relatvie wall- (0), green- (1) and window (2) fractions
     
    41274148                    ind_z0qh         = MERGE( ind_z0qh_gfl,         ind_z0qh_agfl,         &
    41284149                                              surf_usm_v(l)%ground_level(m) )
    4129 
     4150!
     4151!--                 Store building type and its name on each surface element
     4152                    surf_usm_v(l)%building_type(m)      = st
     4153                    surf_usm_v(l)%building_type_name(m) = building_type_name(st)
    41304154!
    41314155!--                 Initialize relatvie wall- (0), green- (1) and window (2) fractions
     
    42104234           ENDDO
    42114235        ENDIF
    4212 
     4236       
    42134237!
    42144238!--     Level 3 - initialization via building_pars read from file
Note: See TracChangeset for help on using the changeset viewer.