Scheduled Downtime
On Tuesday 24 October 2023 @ 5pm MT the forums will be in read only mode in preparation for the downtime. On Wednesday 25 October 2023 @ 5am MT, this website will be down for maintenance and expected to return online later in the morning.
Normal Operations
The forums are back online with normal operations. If you notice any issues or errors related to the forums, please reach out to help@ucar.edu

Changing landuse_timeseries file

Andrie

Andrie
New Member
Dear Team,

I want to run CESM2.1.2 (with CLM5.0) with additional forest cover in some regions. My aim is to use the forest cover of 2015 as a baseline and then afforest transiently until the end of 2100 under an SSP forcing.

While I understand how I can adjust the PCT_CROP, PCT_NATVEG and PCT_NAT_PFT variables in a surfdata file, I do not yet understand the structure of the landuse_timeseries files and thus have some questions how to implement changes in e.g. landuse.timeseries_0.9x1.25_SSP2-4.5_78pfts_CMIP6_simyr1850-2100_c190102.nc.
  1. The landuse_timeseries file has a time dimension but only 1850-1950 are given as years and after that all times are called 0. Why does the time variable not continue with 1950, 1951 etc? If I want to implement my changes from 2015 onwards would that then be time index 166 onwards?
  2. I saw that there are additional variables called PCT_NAT_PFT_MAX and PCT_CFT_MAX. Do I need to adjust these as well if I change PCT_NAT_PFT etc or is that done automatically?
  3. Since I want to implement only forest changes and - to be decided - keep land use either constant or zero (i.e., no harvest, irrigation). How would I do that? Would I fill the arrays for all HARVEST_* and the GRAZING variable with zeros? I also do not seem to be able to see an irrigation variable or is that maybe not in this file?

I very much appreciate your help! Wishing a good day!
 

oleson

Keith Oleson
CSEG and Liaisons
Staff member
Maybe you have a corrupt file. This is what I get when I do an ncdump -v time on that file:

time = 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860,
1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872,
1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884,
1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896,
1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908,
1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920,
1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932,
1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944,
1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956,
1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968,
1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980,
1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992,
1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,
2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028,
2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040,
2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052,
2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064,
2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076,
2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088,
2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100 ;

Yes, you would probably need to adjust PCT_NAT_PFT_MAX and PCT_CFT_MAX. Those are the maximum values of that PFT or CFT in each gridcell in the entire timeseries.
I believe you can turn off harvest and irrigation by specifying namelist variables in your user_nl_clm:
do_harvest = .false.
irrigate = .false.
 
Vote Upvote 0 Downvote

Andrie

Andrie
New Member
I am so sorry, you are right. Something must have gone with the file transfer but now I can see years from 1850-2100.

Wishing a good day!
 
Vote Upvote 0 Downvote

Andrie

Andrie
New Member
Sorry, I would have one follow-up question about landuse_timeseries files in comparison to surfdata files:

In the surfdata files, there is a variable called PCT_NATVEG which when combined with PCT_NAT_PFT can help to calculate the percentage of natural vegetation of the entire gridcell rather than the landunit.

Now for the landuse_timeseries file, I can see a similar variable for crop (PCT_CFT) but I do not see an equivalent to the PCT_NATVEG variable. How would I then calculate the percentage of natural vegetation per gridcell?

P.S: Maybe I made a mistake to start with when calculating the percentage of natural vegetation per gridcell based on surfdata variables, so here is my code below:

file_map = xr.open_dataset("surfdata_0.9x1.25_hist_78pfts_CMIP6_simyr2014_c200512.nc")
crop_natlu = file_map['PCT_NAT_PFT'].values # percent plant functional type on the natural veg landunit (% of landunit) (nat_pft, lsmlat, lsmon)
crop_nat = file_map['PCT_NATVEG'].values # total percent natural vegetation landunit (lsmlat, lslon)

# Create an empty array for storing global natural PFT data (same shape as crop_natlu)
crop_natlu_global = np.zeros_like(crop_natlu)

# Loop through each natural vegetation PFT and adjust its fraction to represent percentage of entire grid cell
for p in range(len(crop_natlu_global[:,1,1])):
crop_natlu_global[p, :, :] = 100. * ((crop_nat[:, :] / 100.) * (crop_natlu[p, :, :] / 100.))
 
Vote Upvote 0 Downvote

slevis

Moderator
Think of the total grid cell as
PCT_NATVEG + PCT_CROP + PCT_WETLAND + PCT_LAKE + PCT_GLACIER + PCT_URBAN
(+ PCT_OCEAN in ctsm5.2 and newer files)

From this you should be able to derive PCT_NATVEG in landuse files knowing that PCT_CROP changes over time.
(In ctsm5.2 and newer files, the PCT_LAKE and PCT_URBAN may change over time, as well.
 
Vote Upvote 0 Downvote

Andrie

Andrie
New Member
Thanks so much for your help, that makes a lot of sense.

Hopefully some of the last questions about this:
  • I could not figure out how I check the ctsm version (so sorry for this basic question). Do I have to check this in the terminal or in the files?
  • Related to this, how could I check if e.g. PCT_URBAN is changing over time since this variable is not in the landuse_timeseries files and thus, I am reading it into my python script from a surfdata file from year 2000.
  • Do I need to change the input_pftdata_filename in the landuse_timeseries file? It seems to point to some file on /glade/ so I assume that it is the filepath to the file it is originally based on?

I really appreciate all your help!
Best wishes
 
Vote Upvote 0 Downvote

oleson

Keith Oleson
CSEG and Liaisons
Staff member
1. You can find instructions here: Information to include in help requests
2. Since PCT_URBAN is not in the original landuse timeseries file (landuse.timeseries_0.9x1.25_SSP2-4.5_78pfts_CMIP6_simyr1850-2100_c190102.nc) then it won't be changing over time.
3. Yes, it contains the file names that the landuse timeseries is based on. I don't see any evidence that the model reads in this variable so it must just be informational, so you shouldn't need to change it.
 
Vote Upvote 0 Downvote
Top