UMEP-dev / SUEWS

Surface Urban Energy and Water Balance Scheme
https://suews.readthedocs.io/
Mozilla Public License 2.0
12 stars 8 forks source link

Finalising Spartacus parameter choices when coupled to SUEWS and deciding which should be user facing. #49

Closed LewisB7 closed 2 years ago

LewisB7 commented 3 years ago

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.

LewisB7 commented 3 years ago

Please see attached table Spartacus_Parameters.docx .

LewisB7 commented 3 years ago

Spartacus_Parameters.docx

I have updated the table in Spartacus_Parameters.docx and also included the namelist files. @suegrimmond @sunt05

LewisB7 commented 3 years ago

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.

sunt05 commented 3 years ago

I decided to copy and put your linked document as md text here, which starts from the next post.

sunt05 commented 3 years ago

Discussion points are highlighted in red. RC – RunControl.nml SU - Spartacus.nml SUP – Spartacus_Profiles.nml I - internal (i.e. not a user choice)

Implementation:

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_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 
/ 
sunt05 commented 3 years ago

Spartacus Parameters

confirmed

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.
sunt05 commented 3 years ago

with concerns


OK to put this as I


@LewisB7 what concern do you have here?


yes, 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.nml

could 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.nml

OK 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. , Update Spartacus.nml

OK for now


check if this is included in other sample nc files. if so, use a value extracted there.


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.nml

OK for now.


OK for now.


OK for now.


OK for now.

sunt05 commented 3 years ago

@LewisB7 please see my comments above; for those you agree, please mark them as done. then we address the others.

LewisB7 commented 3 years ago

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.

rarygit commented 3 years ago

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

LewisB7 commented 3 years ago

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)

rarygit commented 3 years ago

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.

LewisB7 commented 3 years ago

Thank you for the link @rarygit. I was not aware of the MAESPA model.

rarygit commented 3 years ago

@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).

LewisB7 commented 2 years ago

Resolved in meeting between LB and TS today. Some parameters may change subject to future developments.