Closed LewisB7 closed 2 years ago
Please see attached table Spartacus_Parameters.docx .
I have updated the table in Spartacus_Parameters.docx and also included the namelist files. @suegrimmond @sunt05
I have made some small changes to Spartacus_Parameters.docx.
Following advice from Ting I have now put it in sharepoint: https://livereadingac-my.sharepoint.com/:w:/g/personal/wa916280_reading_ac_uk/EbtFYHk0CytAgSJZQteBmo4BNcj6gi2uXgtPla7LLVz_aA?e=EEmn6C so that we can all comment and edit.
I decided to copy and put your linked document as md text here, which starts from the next post.
Discussion points are highlighted in red.
RC
– RunControl.nml
SU
- Spartacus.nml
SUP
– Spartacus_Profiles.nml
I
- internal (i.e. not a user choice)
RunControl.nml
contains a parameter NetRadiationMethod
and when set to larger than 1000 Spartacus will run.
If when divided by 10 the remainder is 1, 2 or 3 then the Ldown method will be option 1, 2 and 3 in SUEWS respectively (i.e. the one used for NetRadiationMethod = 1,2,3
respectively as described in https://suews.readthedocs.io/en/latest/input_files/RunControl/scheme_options.html#cmdoption-arg-NetRadiationMethod )
When NetRadiationMethod>1000
Spartacus reads in Spartacus.nml
and Spartacus_Profiles.nml
.
An if loop could be added within SUEWS so that different NetRadiationMethod
values result in different Spartacus.nml and Spartacus_Profiles.nml files being brought in.
These could have different parameter configurations.
Spartacus.nml
contains constants and logicals:
&Spartacus
nlayers = 15
use_sw_direct_albedo = false
n_vegetation_region_urban = 1
nsw = 1
nlw = 1
nspec = 1
n_stream_sw_urban = 8
n_stream_lw_urban = 8
sw_dn_direct_frac = 0.0
air_ext_sw = 0.0
air_ssa_sw = 0.95
veg_ssa_sw = 0.13
air_ext_lw = 0.0
air_ssa_lw = 0.0
veg_ssa_lw = 0.01
/
Spartacus_Profiles.nml
contains arrays of vertical profiles:
&Spartacus_Profiles
height(1,:) = 0., 5., 10., 15., 20., 25., 30., 35., 40., 45., 50., 55., 60., 65., 70., 75
building_frac(1,:) = 0.44079454, 0.43641054, 0.41948414, 0.3620058 , 0.27059461,
0.19314201, 0.1143779 , 0.07303782, 0.03994853, 0.02287435,
0.01801009, 0.01599049, 0.01091688, 0.00939603, 0.00845396
veg_frac(1,:) = 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
building_scale(1,:) = 34.95857866, 34.99503185, 35.1689881 , 36.6541438 , 40.42309674,
44.61352058, 44.69219304, 45.73676575, 43.63399501, 40.50083884,
40.4682398 , 41.07594181, 40.21164448, 42.41011588, 43.37860781
veg_scale(1,:) = 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0,
10.0, 10.0, 10.0, 10.0, 10.0
veg_ext(1,:) = 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,
0.25, 0.25, 0.25, 0.25, 0.25
veg_fsd(1,:) = 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5
veg_contact_fraction(1,:) = 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
roof_albedo(1,:) = 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
0.5, 0.5, 0.5, 0.5, 0.5
wall_albedo(1,:) = 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
0.5, 0.5, 0.5, 0.5, 0.5
ground_albedo_dir_mult_fact(1,:) = 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.
roof_albedo_dir_mult_fact(1,:) = 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.
wall_specular_frac(1,:) = 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
roof_emissivity(1,:,1) = 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91,
0.91, 0.91, 0.91, 0.91, 0.91
wall_emissivity(1,:,1) = 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91,
0.91, 0.91, 0.91, 0.91, 0.91
/
Parameter | Location in SUEWS | Definition | Current Implementation | Action needed | |
---|---|---|---|---|---|
NetRadiationMethod |
RC | SpartacusUrban | 1003. ForNetRadiationMethod>1000 , when divided by 10, if the remainder equals 1, 2 or 3 then Ldown option is 1, 2 and 3, respectively. Kup and Lup are from Spartacus. |
Update RunControl.nml |
|
do_sw |
I | Compute shortwave fluxes? | True | - | |
do_lw |
I | Compute longwave fluxes? | True | ||
use_sw_direct_albedo |
SU | Specify ground and roof albedos separately for direct solar radiation? | False | Update Spartacus.nml |
|
do_vegetation |
I | Will vegetation be represented? | True if vegetation fraction > 0 and False otherwise | - | |
do_urban |
I | Will urban areas be represented? | True | - | |
n_vegetation_region_urban |
SU | Number of regions used to describe vegetation (2 needed for heterogeneity) | 1 | Update Spartacus.nml |
|
nsw |
SU | Number of shortwave spectral intervals | 1 | Update Spartacus.nml |
|
nlw |
SU | Number of longwave spectral intervals | 1 | Update Spartacus.nml |
|
n_stream_sw_urban |
SU | SW diffuse streams per hemisphere | 2 | Update Spartacus.nml |
|
n_stream_lw_urban |
SU | LW streams per hemisphere | 2 | Update Spartacus.nml |
|
ncol |
I | Number of columns or tiles | 1 | - | |
nlayers |
SU | Number of layers in column | Should be the same as the number of layers in the profile arrays (apart from height which is nlayers+1) | Update Spartacus.nml |
|
i_representation |
I | Surface type. 0: flat, 1: tree, 2: urban, 3: urban+tree | Calculate which surface type is present based on building and vegetation fractions | - | |
ground_temperature (K) |
I | SUEWS TSfc_C. | - | ||
roof_temperature (K) |
I | SUEWS TSfc_C. It is an Nlay array so could vary if T(z) becomes available in SUEWS. | - | ||
wall_temperature (K) |
I | SUEWS TSfc_C. It is an Nlay array so could vary if T(z) becomes available in SUEWS. | - | ||
clear_air_temperature (K) |
I | SUEWS temp_C. It is an Nlay array so could vary if T(z) becomes available in SUEWS. | - | ||
veg_temperature (K) |
I | SUEWS temp_C. It is an Nlay array so could vary if T(z) becomes available in SUEWS. | - | ||
veg_air_temperature |
I | Temperature in the vegetation air space (K) | SUEWS temp_C. It is an Nlay array so could vary if T(z) becomes available in SUEWS. | - | |
building_fraction |
SUP | Building plan area density | SUEWS sfr(2) | Update Spartacus_Profiles.nml Check Fr_Bldgs in SUEWS_SiteSelect.txt is the same as building_fraction first array index. | |
veg_fraction |
SUP | Vegetation plan area density | SUEWS sfr(3)+sfr(4) | Update Spartacus_Profiles.nml Check Fr_EveTr + Fr_DecTr in SUEWS_SiteSelect.txt is the same as veg_fraction first array index. | |
building_scale |
SUP | Building horizontal scale (m). Effective building diameter used (along with building_fraction) to calculate the average building perimeter length. Eq. 2 of spartacus_surface_documentation.pdf. Should be constant with height unless buildings get narrower with height. | Estimate from inspecting buildings in Google Maps or GIS? The exact method of estimation is more involved (and unrealistic that the general user would do it). The method is discussed in “An Exponential Model of Urban Geometry for Use in Radiative Transfer Applications”. | Update Spartacus_Profiles.nml | |
veg_scale |
SUP | Vegetation horizontal scale (m) Vegetation scale used (along with veg_fraction) to calculate the average vegetation perimeter length. Eq. 1 of Spartacus_surface_documentation.pdf. | Estimate from inspecting buildings in Google Maps or GIS? | Update Spartacus_Profiles.nml | |
top_flux_dn_lw |
I | Top-of-canopy downwelling longwave flux | Calculation of Ldown is set by the value of NetRadiationMethod in runcontrol.nml. | Update runcontrol.nml | |
top_flux_dn_direct_sw |
SU | Top-of-canopy downwelling direct shortwave flux | 0.45* Top_flux_dn_lw as an estimate based on Berrizbeitia et al. (2020) (Belgium and Berlin annual average) but would be better off parametrised. | Update Spartacus.nml |
|
top_flux_dn_diffuse_sw |
I | Top-of-canopy downwelling diffuse longwave flux | Kdown - Top_flux_dn_direct_sw | - | |
ground_albedo |
I | Ground albedo | Calculated from SUEWS alb_next and weighted by sfr. Excludes buildings and trees. | Update the SUEWS_Water.txt, SUEWS_Veg.txt and SUEWS_NonVeg.txt files. | |
roof_albedo |
SU | Roof albedo | SUEWS alb_next(2) | Update Spartacus.nml Check building albedo in SUEWS_NonVeg.txt is the same as roof_albedo first array index. |
|
wall_albedo |
SUP | Wall albedo | SUEWS alb_next(2) | Update Spartacus.nml Check building albedo in SUEWS_NonVeg.txt is the same as wall_albedo first array index. |
|
ground_albedo_dir_mult_fact |
SU | (ground_albedo_dir= ground_albedo_dir_mult_fact *ground_albedo) | Ratio of shortwave albedo of ground to direct beam and diffuse beam | Not used when use_sw_direct_albedo = False | Update Spartacus.nml |
roof_albedo_dir_mult_fact |
SUP | (roof_albedo_dir= roof_albedo_dir_mult_fact *roof_albedo) | Ratio of shortwave albedo of roof to direct beam and diffuse beam | Not used when use_sw_direct_albedo = False | Update Spartacus_Profiles.nml |
ground_emissivity |
I | Ground emissivity | Calculated from SUEWS emis and weighted by sfr. Excludes buildings and trees. | - | |
roof_emissivity |
SUP | Roof emissivity | SUEWS emis(2) | Update Spartacus_Profiles.nml Check building emissivty in SUEWS_NonVeg.txt is the same as roof_emissivity first array index. | |
wall_emissivity |
SUP | Wall emissivity | SUEWS emis(2) | Update Spartacus_Profiles.nml Check building emissivity in SUEWS_NonVeg.txt is the same as wall_emissivity first array index. |
nspec
, SU (maybe I since lw_emission calculations are not implemented for multiple bands in Spartacus yet) , Number of shortwave or longwave spectral intervals , 1 (should be the same as nsw and nlw) , Update Spartacus.nml
OK to put this as
I
height
, SUP , Height of the layer interfaces , Nlay+1 evenly separated layers between 0 and max building height. , Update Spartacus_Profiles.nml
Fig to show difference between wind and temperature layers -- which goes to RSL @LewisB7 what concern do you have here?
veg_ext
, SUP , Wavelength independent vegetation extinction coefficient (m-1) (i.e. the number of radiance e-foldings per metre). Should this be related to LAI? At least one parameter in Spartacus should be. Hogan et al. 2018: “If the leaves can be assumed randomly oriented then the optical depth of the layer is equal to half the leaf area index (LAI)” , 0.25 (just took from offline Spartacus Russell_square.nc) , Update Spartacus_Profiles.nmlyes, we should consider using
LAI
here; also, we may need to specify which type of tress we are looking at here.
- [ ]
veg_fsd
, SUP , Fractional standard deviation of vegetation extinction , 0.5 (just took from offline Spartacus config.nam) , Update Spartacus_Profiles.nmlcould be
LAI
related as well.
- [x]
veg_contact_fraction
, SUP , Fraction of vegetation edge in contact with building walls , 0.0 (choosing anything other than zero seems arbitrary without knowledge of the canopy geometry) , Update Spartacus_Profiles.nmlOK for now
- [x]
air_ext
(sw), SU , Wavelength-independent air extinction coefficient (m-1) (i.e. the number of radiance e-foldings per metre). , 0.0 (not set in offline Spartacus Russell_square.nc and has no default value in the code). It is a profile but we will treat as constant. , UpdateSpartacus.nml
OK for now
air_ssa
(sw), SU , Shortwave single scattering albedo of air , 0.0 (not set in offline Spartacus Russell_square.nc and has no default value in the code). It is a profile but we will treat as constant. , Update Spartacus.nml
check if this is included in other sample
nc
files. if so, use a value extracted there.
veg_ssa
(sw), SU , Shortwave single scattering albedo of leaves , 0.13 (just took from offline Spartacus Russell_square.nc) It is a profile but we will treat as constant. , Update Spartacus.nml
this should be consistent with vegetation settings in SUEWS.
- [x]
wall_specular_frac
, SUP , Fraction of wall reflection that is specular , 0.0 as in the spartacus_surface_documanetation.pdf. Using values larger than 0.0 would require knowledge of the wall percentage window cover, and the specular fraction of a window. , Update Spartacus_Profiles.nmlOK for now.
air_ext
(lw) , SU , Wavelength-independent air extinction coefficient (m-1) (i.e. the number of radiance e-foldings per metre) , 0.0 (not set in offline Spartacus Russell_square.nc and has no default value in the code) It is a profile in Spartacus but we will treat as constant. , Update Spartacus.nml
OK for now.
air_ssa
(lw) , SU , Longwave single scattering albedo of air , 0.0 (not set in offline Spartacus Russell_square.nc and has no default value in the code). It is a profile in Spartacus but we will treat as constant. , Update Spartacus.nml
OK for now.
veg_ssa
(lw) , SU , Longwave single scattering albedo of leaves , (just took from offline Spartacus Russell_square.nc) It is a profile in Spartacus but we will treat as constant. , Update Spartacus.nml
OK for now.
@LewisB7 please see my comments above; for those you agree, please mark them as done
. then we address the others.
Thanks for this Ting.
For the height array there are no concerns. Sue asked me to make a figure comparing the vertical geometry of the canopy as represented by Spartacus and RSL. I left the note in red.
I will look into veg_ext and veg_fsd. I am not yet sure how to relate them to LAI. Particularly veg_fsd since I do not know what it represents - the documentation and papers do not explain. I think it should be easy to separate out tree types, since we can calculate the parameters for each tree type and then combine them in an area weighted average.
I have checked the other .nc files and there is no value for air_ssa. I will leave it as zero.
Just browsing by: veg_fsd
Does it relate to this? ! Fractional standard deviation of vegetation optical depth real(kind=jprb), allocatable :: veg_fsd(:) ! (ntotlay) https://github.com/ecmwf/spartacus-surface/blob/eed4a4255df9d3a34fc39e14a571802bf5b3ef3c/radsurf/radsurf_canopy_properties.F90
Which has interesting, but possibly irrelevant (non-spartacus), discussions here: The global long-term microwave Vegetation Optical Depth Climate Archive https://essd.copernicus.org/articles/12/177/2020/ The use of reflection from vegetation for estimating broken-cloud optical depth https://www.researchgate.net/publication/228413589_The_use_of_reflection_from_vegetation_for_estimating_broken-cloud_optical_depth
And here, spartacus speaking about optical depth, radiation parameters and clouds: Entrapment: An Important Mechanism to Explain the Shortwave 3D Radiative Effect of Clouds https://journals.ametsoc.org/view/journals/atsc/76/7/jas-d-18-0366.1.xml
Thanks @rarygit. The last paper I had missed and was useful. It says "Tripleclouds takes as input a profile of fractional standard deviation (FSD), which is the standard deviation of in-cloud water content or extinction coefficient divided by the in-cloud mean value." So in the context of vegetation canopies the analogy would be that veg_fsd is the standard deviation of vegetation optical depth or extinction coefficient divided by the in-canopy mean value. The parameter is used when n_vegetation_region_urban>1 so that there are regions of the vegetation canopy with larger extinction coefficient than others. The parametrisation takes account of this when calculating the average extinction coefficient. I have no sense of what a reasonable value for the standard deviation of attenuation coefficient is for vegetation canopies. I will leave it as 0.5 which is the value Robin Hogan put in the config.nam for the SPARTACUS test cases.
The Beer-Lambert’s law is I=I_oexp(-kLAI) where I and I_o are the radiation incident at the top and bottom of the layer respectively, k is the extinction coefficient and LAI is the leaf area index. LAI is the total one-sided area of photosynthetic tissue per unit horizontal ground surface area (dimensionless) and k is the interception efficiency which depends on how the leaves are clumped, the radiative properties of the individual leaves and leaf orientation relative to one another and the solar zenith angle (dimensionless).
Hogan et al. 2018, “Fast matrix treatment of 3-D radiative transfer in vegetation canopies: SPARTACUS-Vegetation 1.1” states: “In the simplest case, where leaves are assumed to be randomly oriented, the optical depth of a region is equal to half its LAI, and therefore for a layer of thickness Deltaz, the extinction coefficients to direct and diffuse radiation are the same and are given by σ = σ0 = LAI/(2Deltaz).” To make sense of dimensions I think their definition of LAI must be photosynthetic tissue within a vertical layer of thickness Deltaz per unit horizontal ground surface area (i.e. LAI is dimensionless). What they call optical depth I think is the traditional definition of extinction coefficient, and their extinction coefficient is units per metre since it is divided by Deltaz. We should check with Robin, but perhaps the way to parametrise extinction coefficient is to 1) Take the SUEWS LAI and split it into n layers where LAI(1)+LAI(2)+…+LAI(n)=LAI 2) The LAI in the i^th layer is determined by the fraction of the total vegetation that is contained within that layer 3) Extinction coefficient in the i^th layer = LAI(i)/(2Deltaz)
Hi @LewisB7, that is quite a comprehensive summary, thanks! I will read through it. Having read it, very informative!
As an interested bystander as to how spartacus will function within suews, I can only follow how this develops.
If it helps, Vezy 2018 made some interesting observations regarding canopy complexity and the utility of constant extinction coefficients (https://vezy.github.io/DynACof/reference/Light_extinction_K.html) using MAESPA. In particular canopy temperature, which was my interest in simulating with MAESPA.
Thank you for the link @rarygit. I was not aware of the MAESPA model.
@LewisB7 , if it helps, I used the TRY plant trait database to populate the vegetation/tree parameters in MAESPA https://www.try-db.org/TryWeb/Home.php Plant traits - morphological, anatomical, biochemical, physiological or phenological features of individuals or their component organs or tissues
Remy Vezy's PhD and associated fortran code was very useful in understanding the theory and functional relationships within the MAEPA model. https://gitlab.com/VEZY/MAESPA
I compiled a non-parallel version of his model.
Kerry Nice's PhD ran a version coupling MAESPA with TUF-3D (Krayenhoff and Voogt, 2007)) in an urban setting. https://users.monash.edu.au/~kerryn/files/WSC2014Poster_KerryNice.pdf The code and examples are available online. PhD dissertation also. https://github.com/mothlight/VTUF-3D The simulation output is surprisingly large (gigabytes in disk space). I have to check whether Kerry changed the code so that the meteorological input for MAESPA includes L_down radiation (e.g. from adjacent buildings).
Resolved in meeting between LB and TS today. Some parameters may change subject to future developments.
Ting and I discussed that before documenting Spartacus in the SUEWS manual, we should discuss parameter values. Also, we need to decide which parameters should be available to the SUEWS user.
I will document the parameters and highlight those which require discussion.