NCAR / LMWG_dev

Repository to track LMWG development simulations
3 stars 0 forks source link

FunBug (ctsm51d130_ne30pg3_GSWP3V1_LMWG_dev8_1850[AD, pAD]) #8

Open wwieder opened 1 year ago

wwieder commented 1 year ago

Description:

Parameter values for kc_nonmyc and kn_nonmyc switched in CLM5 & CTSM5.1 .

@ecaas noticed low mycorrhizal N uptake rates in CLM5.1 simulations and worked with @rosiealice and FUN developers to determine that parameter values for non-mycorrhizal N uptake costs (kc_nonmyc and kn_nonmyc ) in FUN were switched CTSM Issue #2120, see also discussion #2098.

@linniahawkins did some tests with the sparse grid to quickly evaluate the global impact of this bug and found lower steady state C pools and fluxes, but similar behavior in transient simulations. This simulation is intended to more fully evaluate impacts of fixing the parameter bug in global CLM land only simulations. Given differences in the code base, it may be necessary to create a new parameter file for the main development branch of the model.

Corrected values for these parameter from @ecaas are below

kn_nonmyc = 0, 0.72, 0.72, 0.72, 0.72, 0.72, 0.072, 0.72, 0.72, 0.72, 0.72,
0.72, 0.72, 0.72, 7.2, 0.72, 0.72, 7.2, 7.2, 0.72, 0.72, 0.72, 0.72,
0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72,
0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72,
0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72,
0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 7.2, 7.2, 0.72, 0.72,
0.72, 0.72, 7.2, 7.2, 7.2, 7.2, 0.72, 0.72 ;

kc_nonmyc = 0, 0.012, 0.012, 0.0012, 0.012, 0.012, 0.0012, 0.012, 0.012,
0.012, 0.012, 0.012, 0.012, 0.012, 0.12, 0.012, 0.012, 0.12, 0.12, 0.012,
0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012,
0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012,
0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012,
0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012,
0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.012, 0.12, 0.12, 0.012,
0.012, 0.012, 0.012, 0.12, 0.12, 0.12, 0.12, 0.012, 0.012 ;

Case directory: Locally: /glade/u/home/slevis/cases_LMWG_dev/ctsm51d130_ne30pg3_GSWP3V1_LMWG_dev8_1850[AD, pAD]


Sandbox: Locally: /glade/work/slevis/git/LMWG_dev8

Local branch name: ctsm5.1.dev130


usernl changes: Same as #1 plus new paramfile: paramfile = '/glade/u/home/slevis/cases_LMWG_dev/issue8/inputs/ctsm51_params.LMWG_dev8.c230911.nc' Also from #1 I copied CaseDocs/datm.streams.xml to this case rather than modifying the /cdeps directory, which is what Keith's setup does.


SourceMods: Same as #1.


Diagnostics: https://webext.cgd.ucar.edu/I1850/ctsm51d130_ne30pg3_GSWP3V1_LMWG_dev8_1850/lnd/ctsm51d130_ne30pg3_GSWP3V1_LMWG_dev8_1850.2_20-ctsm51_cesm23a16bctsm51d130_ne30pg3ne30pg3mg17_GSWP3V1_1850.2_20/setsIndex.html


Output: /glade/scratch/slevis/archive/ctsm51d130_ne30pg3_GSWP3V1_LMWG_dev8_1850[AD, pAD]


Contacts: @slevis-lmwg


Extra details:

./create_newcase --case ~/cases_LMWG_dev/ctsm51d130_ne30pg3_GSWP3V1_LMWG_dev8_1850AD --compset 1850_DATM%GSWP3v1_CLM51%BGC-CROP_SICE_SOCN_SROF_SGLC_SWAV --res ne30pg3_ne30pg3_mg17 --run-unsupported

AD 240 yrs pAD 480 yrs

slevis-lmwg commented 1 year ago

@wwieder

wwieder commented 1 year ago

I'd do these with the same compset @olyson is using for the arctic vegetation runs (I'm assuming 1 degree, bgc crop, spinup and historical).

rosiealice commented 1 year ago

Just wanting to note that for CLM5 we treated the magnitude of these numbers as tuning parameters, and that is why some of them are an order or magnitude different....

slevis-lmwg commented 1 year ago

@olyson and I talked, and I am setting up the spinup as he did in #1. This way we can compare to his control.

wwieder commented 1 year ago

When this is done, let's look at PFT survival compared to the control simulation.

slevis-lmwg commented 12 months ago

@wwieder Keith and I resolved the regrid issues with the diag. pkg. Diagnostics are now posted above for this case, as well.

wwieder commented 12 months ago

I had wanted to start looking at PFT survival, but there doesn't seem to be the same information on these h1 files, presumably because of the ne30 grids were you able to preprocess these h1 datasets?

slevis-lmwg commented 12 months ago

I think that there is mapping info in the files, but maybe it looks different than before. For example I found these relevant variables in one of the daily files: ncdump ctsm51d130_ne30pg3_GSWP3V1_LMWG_dev8_1850.clm2.h1.0020-12-31-00000.nc

[...]
        float lon(lndgrid) ;
                lon:long_name = "coordinate longitude" ;
                lon:units = "degrees_east" ;
                lon:_FillValue = 1.e+36f ;
                lon:missing_value = 1.e+36f ;
        float lat(lndgrid) ;
                lat:long_name = "coordinate latitude" ;
                lat:units = "degrees_north" ;
                lat:_FillValue = 1.e+36f ;
                lat:missing_value = 1.e+36f ;
[...]
        double grid1d_lon(gridcell) ;
                grid1d_lon:long_name = "gridcell longitude" ;
                grid1d_lon:units = "degrees_east" ;
                grid1d_lon:_FillValue = 1.e+36 ;
        double grid1d_lat(gridcell) ;
                grid1d_lat:long_name = "gridcell latitude" ;
                grid1d_lat:units = "degrees_north" ;
                grid1d_lat:_FillValue = 1.e+36 ;
        int grid1d_ixy(gridcell) ;
                grid1d_ixy:long_name = "2d longitude index of corresponding gridcell" ;
                grid1d_ixy:_FillValue = -9999 ;
        int grid1d_jxy(gridcell) ;
                grid1d_jxy:long_name = "2d latitude index of corresponding gridcell" ;
                grid1d_jxy:_FillValue = -9999 ;
        double land1d_lon(landunit) ;
                land1d_lon:long_name = "landunit longitude" ;
                land1d_lon:units = "degrees_east" ;
                land1d_lon:_FillValue = 1.e+36 ;
        double land1d_lat(landunit) ;
                land1d_lat:long_name = "landunit latitude" ;
                land1d_lat:units = "degrees_north" ;
                land1d_lat:_FillValue = 1.e+36 ;
        int land1d_ixy(landunit) ;
                land1d_ixy:long_name = "2d longitude index of corresponding landunit" ;
                land1d_ixy:_FillValue = -9999 ;
        int land1d_jxy(landunit) ;
                land1d_jxy:long_name = "2d latitude index of corresponding landunit" ;
                land1d_jxy:_FillValue = -9999 ;
        int land1d_gi(landunit) ;
                land1d_gi:long_name = "1d grid index of corresponding landunit" ;
                land1d_gi:_FillValue = -9999 ;
        double land1d_wtgcell(landunit) ;
                land1d_wtgcell:long_name = "landunit weight relative to corresponding gridcell" ;
                land1d_wtgcell:_FillValue = 1.e+36 ;
        int land1d_ityplunit(landunit) ;
                land1d_ityplunit:long_name = "landunit type (vegetated,urban,lake,wetland,glacier or glacier_mec)" ;
                land1d_ityplunit:_FillValue = -9999 ;
        int land1d_active(landunit) ;
                land1d_active:long_name = "true => do computations on this landunit" ;
                land1d_active:_FillValue = 0 ;
                land1d_active:flag_values = 0, 1 ;
                land1d_active:flag_meanings = "FALSE TRUE" ;
                land1d_active:valid_range = 0, 1 ;
        double cols1d_lon(column) ;
                cols1d_lon:long_name = "column longitude" ;
                cols1d_lon:units = "degrees_east" ;
                cols1d_lon:_FillValue = 1.e+36 ;
        double cols1d_lat(column) ;
                cols1d_lat:long_name = "column latitude" ;
                cols1d_lat:units = "degrees_north" ;
                cols1d_lat:_FillValue = 1.e+36 ;
        int cols1d_ixy(column) ;
                cols1d_ixy:long_name = "2d longitude index of corresponding column" ;
                cols1d_ixy:_FillValue = -9999 ;
        int cols1d_jxy(column) ;
                cols1d_jxy:long_name = "2d latitude index of corresponding column" ;
                cols1d_jxy:_FillValue = -9999 ;
        int cols1d_gi(column) ;
                cols1d_gi:long_name = "1d grid index of corresponding column" ;
                cols1d_gi:_FillValue = -9999 ;
        int cols1d_li(column) ;
                cols1d_li:long_name = "1d landunit index of corresponding column" ;
                cols1d_li:_FillValue = -9999 ;
        double cols1d_wtgcell(column) ;
                cols1d_wtgcell:long_name = "column weight relative to corresponding gridcell" ;
                cols1d_wtgcell:_FillValue = 1.e+36 ;
        double cols1d_wtlunit(column) ;
                cols1d_wtlunit:long_name = "column weight relative to corresponding landunit" ;
                cols1d_wtlunit:_FillValue = 1.e+36 ;
        int cols1d_itype_col(column) ;
                cols1d_itype_col:long_name = "column type (see global attributes)" ;
                cols1d_itype_col:_FillValue = -9999 ;
        int cols1d_itype_lunit(column) ;
                cols1d_itype_lunit:long_name = "column landunit type (vegetated,urban,lake,wetland,glacier or glacier_mec)" ;
                cols1d_itype_lunit:_FillValue = -9999 ;
        int cols1d_active(column) ;
                cols1d_active:long_name = "true => do computations on this column" ;
                cols1d_active:_FillValue = 0 ;
                cols1d_active:flag_values = 0, 1 ;
                cols1d_active:flag_meanings = "FALSE TRUE" ;
                cols1d_active:valid_range = 0, 1 ;
        double pfts1d_lon(pft) ;
                pfts1d_lon:long_name = "pft longitude" ;
                pfts1d_lon:units = "degrees_east" ;
                pfts1d_lon:_FillValue = 1.e+36 ;
        double pfts1d_lat(pft) ;
                pfts1d_lat:long_name = "pft latitude" ;
                pfts1d_lat:units = "degrees_north" ;
                pfts1d_lat:_FillValue = 1.e+36 ;
        int pfts1d_ixy(pft) ;
                pfts1d_ixy:long_name = "2d longitude index of corresponding pft" ;
                pfts1d_ixy:_FillValue = -9999 ;
        int pfts1d_jxy(pft) ;
                pfts1d_jxy:long_name = "2d latitude index of corresponding pft" ;
                pfts1d_jxy:_FillValue = -9999 ;
        int pfts1d_gi(pft) ;
                pfts1d_gi:long_name = "1d grid index of corresponding pft" ;
                pfts1d_gi:_FillValue = -9999 ;
        int pfts1d_li(pft) ;
                pfts1d_li:long_name = "1d landunit index of corresponding pft" ;
                pfts1d_li:_FillValue = -9999 ;
        int pfts1d_ci(pft) ;
                pfts1d_ci:long_name = "1d column index of corresponding pft" ;
                pfts1d_ci:_FillValue = -9999 ;
        double pfts1d_wtgcell(pft) ;
                pfts1d_wtgcell:long_name = "pft weight relative to corresponding gridcell" ;
                pfts1d_wtgcell:_FillValue = 1.e+36 ;
        double pfts1d_wtlunit(pft) ;
                pfts1d_wtlunit:long_name = "pft weight relative to corresponding landunit" ;
                pfts1d_wtlunit:_FillValue = 1.e+36 ;
        double pfts1d_wtcol(pft) ;
                pfts1d_wtcol:long_name = "pft weight relative to corresponding column" ;
                pfts1d_wtcol:_FillValue = 1.e+36 ;
        int pfts1d_itype_veg(pft) ;
                pfts1d_itype_veg:long_name = "pft vegetation type" ;
                pfts1d_itype_veg:_FillValue = -9999 ;
        int pfts1d_itype_col(pft) ;
                pfts1d_itype_col:long_name = "pft column type (see global attributes)" ;
                pfts1d_itype_col:_FillValue = -9999 ;
        int pfts1d_itype_lunit(pft) ;
                pfts1d_itype_lunit:long_name = "pft landunit type (vegetated,urban,lake,wetland,glacier or glacier_mec)" ;
                pfts1d_itype_lunit:_FillValue = -9999 ;
        int pfts1d_active(pft) ;
                pfts1d_active:long_name = "true => do computations on this pft" ;
                pfts1d_active:_FillValue = 0 ;
                pfts1d_active:flag_values = 0, 1 ;
                pfts1d_active:flag_meanings = "FALSE TRUE" ;
                pfts1d_active:valid_range = 0, 1 ;
[...]
slevis-lmwg commented 12 months ago

I would be happy to go over the code together to figure out what needs to be done.

wwieder commented 12 months ago

Thanks Sam. I'm wondering if there's more information to when we generate single variable time series? For example this notebook works for PFT output generated by the CESM2-LE, but when I point it to your h1 files it doesn't work?