= PALM Create Static Driver (palm_csd) = In order to create comprehensive drivers for PALM runs in urban environments, PALM comes shipped with the tool palm_csd. This python3-based script was developed in the course of [http://uc2-mosaik.org the MOSAIK project] and thus is, in principal, only working for the democities Berlin, Hamburg, and Stuttgart. However, with some effort it is possible to adapt the script for other cities as well. Note that in the mid-term, palm_csd will be replaced by a more generic and universal tool based with a graphical user interface as front end. == Usage == === Execution === In order to create a static driver, go to the working directory (usually {{{~/palm/current_version}}}), prepare a palm_csd configuration file (see below, an exemplary file can be found [source:palm/trunk/SCRIPTS/.csd.config.default here]). After set-up of the configuration file, execute palm_csd as follows: {{{ palm_csd .csd.config.default }}} The static driver will be written to the directory specified in the configuration file. During compilation of the driver, palm_csd will print some more or less useful information to screen. === Configuration file === This section describes how to set-up a configuration file for creating a static driver for PALM based on pre-processed NetCDF data. In the following we will use data for Berlin, which is available via Open Access. The configuration file uses the well-known format of INI files, which are processed by the ConfigParser package in python. It consists of the following sections: ==== [global] ==== A set of global attributes can be defined that will be passed to the static driver file. In details, the following attributes can be set (see also [wiki:doc/app/iofiles/pids/static static driver description]: ||='''Attribute''' =||='''Data type''' =||='''Description''' =|| || {{{author}}} || string || Author of the static driver. Use the format: name, email || || {{{contact}}} || string || Contact person, format as for {{{author}}} || || {{{acronym}}} || string || Institional acronym (formating rules applies to static drivers used in the [http://uc2-mosaik.org MOSAIK] project) || || {{{comment}}} || string || Arbitrary text || || {{{data_content}}} || string || Arbitrary text || || {{{dependencies}}} || string || Arbitrary text || || {{{keywords}}} || string || Arbitrary keywords || || {{{source}}} || string || List of data sources used to generate the driver || || {{{campaign}}} || string || Information on measurement capaign (if applicable) || || {{{location}}} || string || Geo-location of the static driver content (if applicable) || || {{{site}}} || string || Site description od the static driver content (if applicable) || || {{{institution}}} || string || Institution of the driver creator || || {{{palm_version}}} || float || PALM version for which the driver was generated (for comptatibility checks) || || {{{rotation_angle}}} || float || Clockwise angle of rotation in degrees between North positive y axis and the y axis in the data, e.g. ''0.0''. This value overwrites the namelist parameter [wiki:doc/app/initialization_parameters#rotation_angle rotation_angle] || || {{{references}}} || string || Arbitrary text || Example: {{{ author = Bjoern Maronga, maronga@muk.uni-hannover.de contact_person = Bjoern Maronga, maronga@muk.uni-hannover.de acronym = LUHimuk comment = created with palm_csd data_content dependencies keywords source campaign location = Berlin site = Berlin Mitte institution = Institute of Meteorology and Climatology, Leibniz University Hannover palm_version = 6.0 rotation_angle = 0.0 references }}} Note that most of the global attributes have no effect on the PALM simulations, except {{{rotation_angle}}} and {{{palm_version}}}. ==== [settings] ==== This section describes global parameters used to create the static driver. All following parameters are mandatory! ||='''Variable''' =||='''Data type''' =||='''Description''' =|| || {{{bridge_width}}} || float ||In case that the simulation domain contains bridges, this parameter (in m) defines the vertical thickness of all bridge elements in the domain. Note that bridges require LOD2 building information (i.e. {{{buildings_3d}}}) || || {{{debug_mode}}} || logical ||Can be set to {{{True}}} or {{{False}}}. Used for debugging by model developers only, currently this parameter has no effect || || {{{lai_roof_extensive}}} || float ||Leaf are index for green roofs with extensive vegetation, defined by setting the appropriate {{{building_pars}}} field. The value is assigned to all extensive green roofs in the model domain || || {{{lai_roof_intensive}}} || float ||Leaf are index for green roofs with intensive vegetation, defined by setting the appropriate {{{building_pars}}} field. The value is assigned to all intensive green roofs in the model domain || || {{{lai_high_vegetation_default}}} || float ||Default leaf area index for (high) vegetation used to generate the 3D leaf area density field. This value is used for all pixels for which no other leaf area density is available (i.e. to fill missing data)|| || {{{lai_low_vegetation_default}}} || float ||Default leaf area index for (low) vegetation used to fill data gaps in the leaf area index distribution. This parameter only will a LOD2 leaf area index for parameterized vegetation via vegetation_type, i.e., through the {{{vegetation_pars}}} field || || {{{lai_alpha}}} || float ||Parameter for reconstruction of vertical LAD profiles based on tree shape parameters (alpha, beta) and the integral leaf area index after Markkanen et al. (2003). This scheme is used for vegetation patches (parks, forests), where the canopy can be considered to be pseudo-1D and for which usually no information on individual trees is available. || || {{{lai_beta}}} || float ||Parameter for reconstruction of vertical LAD profiles based on tree shape parameters (alpha, beta) and the integral leaf area index after Markkanen et al. (2003). This scheme is used for vegetation patches (parks, forests), where the canopy can be considered to be pseudo-1D and for which usually no information on individual trees is available. || || {{{patch_height_default}}} || float ||Default patch height (in m), which is used in the canopy generator to process canopy patches (parks, forests) for which data for individual trees is usually lacking. This parameter comes into affect for data gaps where no other vegetation height is available || || {{{season}}} || string ||As palm_csd can work with different sets of input data regarding leaf area index, this switch parameter can be set to either "summer" or "winter" to select the most suitable leaf area index input file to account for differences in leaf amount. Data for summer is usually from August (fully leaved), while data for winter is usually from April. || Example: {{{ bridge_width = 3.0 debug_mode = False lai_roof_extensive = 3.0 lai_roof_intensive = 1.5 lai_high_vegetation_default = 5.0 lai_low_vegetation_default = 1.0 lai_alpha = 5.0 lai_beta = 3.0 patch_height_default = 10.0 season = "summer" }}} ==== [output] ==== This section describes the location for the static driver output. ||='''Variable''' =||='''Data type''' =||='''Description''' =|| || {{{path}}} || string ||Directory where the output file shall be stored. Note that the static driver can - depending on model domain size - be quite large (in the order of several GB). || || {{{file_out}}} || string ||Output file name. The final output will be stored under {{{path}}}/{{{file_out}}}_{{{domain}}}, where {{{domain}}} will be "root" for the parent (root) domain, and "N01", "N02", etc., for child domains N01, N02, etc., respectively || {{{version}}} || integer ||User-specific setting to track updates of a static driver. This value will be added as global attribute to the static driver || Example: {{{ path = /ldata2/MOSAIK/ file_out = winter_iop1_test version = 1 }}} ==== [input_01] - [input_XX] ==== The configuration file can include several sets of input data for different grid spacing. For each set of input data, an individual section must be provided and numbered accordingly (i.e., [input_01], [input_02], etc.). Note that for a given pixel size (i.e. horizontal grid spacing), only one set of input files can be provided. All input data must be two-dimensions (y,x). Currently, {{{palm_csd}}} expects all variables in the respective input files to be named 'Band1'. ||='''Variable''' =||='''Data type''' =||='''Description''' =|| || {{{path}}} || string ||Directory where the NetCDF input files reside || || {{{pixel_size}}} || float ||Horizontal grid spacing (m) of a surface pixel of size {{{dx*dy}}} where {{{dx = dy}}} in the input data || || {{{file_x}}} || string ||UTM x-coordinates for the simulation domain (m) || || {{{file_y}}} || string ||UTM y-coordinates for the simulation domain (m) || || {{{file_lat}}} || string ||Latitude (degrees N) for the simulation domain || || {{{file_lon}}} || string ||Longitude (degrees E) for the simulation domain || || {{{file_zt}}} || string ||Terrain height (m) || || {{{file_buildings_2d}}} || string ||2D Building height (m) || || {{{file_building_id}}} || string ||Building ids || || {{{file_building_type}}} || string ||Building type distribution || || {{{file_bridges_2d}}} || string ||2D Map of bridge height (m) || || {{{file_bridges_id}}} || string ||Bridge ids || || {{{file_lai}}} || string ||Leaf area index || || {{{file_vegetation_type}}} || string ||Vegetation type distribution || || {{{file_vegetation_height}}} || string ||Vegetation height (m) || || {{{file_pavement_type}}} || string ||Pavement type distribution || || {{{file_water_type}}} || string ||Water type distribution || || {{{file_soil_type}}} || string ||Soil type distribution || || {{{file_street_type}}} || string ||Street type distribution (used for parameterized chemistry emissions and multi-agent model) || || {{{file_street_crossings}}} || string ||Street crossings (used for multi-agent model) || || {{{file_tree_height}}} || string ||Tree height (m) for street trees. For each tree only one value can be given at the center of the tree location || || {{{file_tree_crown_diameter}}} || string ||Tree crown diameter (m). For each tree only one value can be given at the center of the tree location || || {{{file_tree_trunk_diameter}}} || string ||Trunk diameter at breast height (m). For each tree only one value can be given at the center of the tree location || || {{{file_tree_type}}} || string ||Tree type according to the canopy generator tree inventory. For each tree only one value can be given at the center of the tree location || || {{{file_patch_height}}} || string ||2D distribution of the vegetation canopy height || || {{{file_vegetation_on_roofs}}} || string ||2D distribution of green roofs. Values can be 0.0-1.0. Intensive vegetation is considered for values >= 0.5, while extensive vegetation is assumed for values > 0.5 || Example: {{{ path = /ldata2/MOSAIK/Berlin_static_driver_data pixel_size = 15.0 file_x = Berlin_CoordinatesUTM_y_15m_DLR.nc file_y = Berlin_CoordinatesUTM_x_15m_DLR.nc file_lat = Berlin_CoordinatesLatLon_y_15m_DLR.nc file_lon = Berlin_CoordinatesLatLon_x_15m_DLR.nc file_zt = Berlin_terrain_height_15m_DLR.nc file_buildings_2d = Berlin_building_height_15m_DLR.nc file_building_id = Berlin_building_id_15m_DLR.nc file_building_type = Berlin_building_type_15m_DLR.nc file_bridges_2d = Berlin_bridges_height_15m_DLR.nc file_bridges_id = Berlin_bridges_id_15m_DLR.nc file_lai = Berlin_leaf_area_index_15m_DLR_WANG_summer.nc file_vegetation_type = Berlin_vegetation_type_15m_DLR.nc file_vegetation_height = Berlin_vegetation_patch_height_15m_DLR.nc file_pavement_type = Berlin_pavement_type_15m_DLR.nc file_water_type = Berlin_water_type_15m_DLR.nc file_soil_type = Berlin_soil_type_15m_DLR.nc file_street_type = Berlin_street_type_15m_DLR.nc file_street_crossings = Berlin_street_crossings_15m_DLR.nc file_tree_height = Berlin_trees_height_clean_15m.nc file_tree_crown_diameter = Berlin_tree_crown_15m_DLR.nc file_tree_trunk_diameter = Berlin_trees_trunk_clean_15m.nc file_tree_type = Berlin_trees_type_15m_DLR.nc file_patch_height = Berlin_vegetation_patch_height_15m_DLR.nc file_vegetation_on_roofs = Berlin_vegetation_on_roofs_15m_DLR.nc }}} ==== [domain_root] ==== pixel_size = 15.0 origin_x = 19605 origin_y = 20895 nx = 200 ny = 200 buildings_3d = False dz = 15.0 allow_high_vegetation = True generate_vegetation_patches = True use_palm_z_axis= False interpolate_terrain = False domain_parent vegetation_on_roofs = True street_trees = True canopy_patches = True ==== [domain_01] - [domain_NXX] ==== pixel_size = 1.0 origin_x = 19605 origin_y = 20895 nx = 1023 ny = 1023 buildings_3d = True dz = 1.0 allow_high_vegetation = False generate_vegetation_patches = True use_palm_z_axis= True interpolate_terrain = True domain_parent = root vegetation_on_roofs = True street_trees = True canopy_patches = True === Required input data === ---- == Technical documentation == === Overview === === Processing of nested domains === === Canopy generator === ==== Single trees ==== ==== Vegetation canopies ==== ---- == Best practices == ---- == [=#example '''Example static driver file] == {{{ #!div style="align:'left'; width: 400px; border: 0px solid; float:right" }}} An example static driver file can be downloaded [attachment:static_driver_example.nc here] (built for PALM r4311). ||[[Image(screen_example.png,900px,link=attachment:static_driver_example.nc)]]\\Snapshot of building heights in example static driver file (using ncview) ||[[Image(ncdump_screen.png,300px,link=attachment:static_driver_example_dump.txt)]]\\ncdump of the static driver file header || == Literature == * Heldens et al. * Mikhailovic & Lalic * Markkanen, T., Rannik, Ü., Marcolla, B. et al. Footprints and Fetches for Fluxes over Forest Canopies with Varying Structure and Density. Boundary-Layer Meteorology 106, 437–459 (2003). https://doi.org/10.1023/A:1021261606719