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

CAM-CHEM reading external CO2 emission file

Hello, I'm new in CESM and I've been running B2000CNCHM compset successfully. Now, I would like to perform an experiment using my own anthropogenic CO2 emission file (It's a netcdf file with time, lat, lon structure). I'm trying to edit cam namelist with  srf_emis_specifier = 'CO2 -> /path/to/file' but isn't work. (shr_sys_abort) ERROR: srf_emis_inti: invalid surface emission specification
(shr_sys_abort) WARNING: calling shr_mpi_abort() and stopping PD: I edited SO2 surface emissions successfully with the same procedure.
Any suggestions?
I really appreciate any help you can provide.   
 

tilmes

Member
Hi Andres,the current version of the model cannot handle CO2 surface emissions. CO2 concentrations are set in the lower boundary condition file.Simone
 
Hi Simone,I dumped the LBC file (LBC_1850-2100_1.9x2.5_REF2_za_c080114.nc) and their structure is:float CO2_LBC(time, lat) ;
        CO2_LBC:long_name = "CO2 lower boundary condition" ;
        CO2_LBC:units = "mol/mol" ;

I would like to specify CO2 concentrations using lat lon structure. My goal is to increase CO2 emissions in certain places (e.g. South-East Asia and Central Europe). It could be possible? Thank you,
 

tilmes

Member
Hi, that could work. There is also a namelist option called:&co2_cycle_nl
 co2flux_fuel_file        = '  'but I don't know how this changes the concentrations...  Simone 
 
Hi Simone,
I Applied your suggestion and changed the following parameters in the namelist:co2_flag=.true.
co2_readFlux_fuel=.true.
co2flux_fuel_file='/path/to/directory.nc'It compiles OK, but when I run the model I get this error:CNST_ADD: advected tracer index greater than pcnst =           18
(shr_sys_abort) WARNING: calling shr_mpi_abort() and stopping Andrés 
 
Hi,
I answer myself. I must add -co2_cycle flag in env_build.xml, and then build the case.However, I've a new problem when I run the model: co2flux_fossil_1751-2006-monthly_0.9x1.25_c20100204.nc
 (GETFIL): using
 /home/andres.martinez/cesm1_2_2/inputdata/atm/cam/ggas/co2flux_fossil_1751-2006
 -monthly_0.9x1.25_c20100204.nc
 CO2FLUX_READ: NCOPN returns id        65536  for file
 /home/andres.martinez/cesm1_2_2/inputdata/atm/cam/ggas/co2flux_fossil_1751-2006
 -monthly_0.9x1.25_c20100204.nc
 CO2FLUX_READ: Failed to find dates bracketing ncdate, ncsec=        1231
       84600
(shr_sys_abort) WARNING: calling shr_mpi_abort() and stoppingWhat's wrong? Thanks,
 
Hi,
I've checked co2flux_fossil_1751-2006-monthly_0.9x1.25_c20100204  and it covers from 1751 to 2006 (monthly data). I've also extracted data from 2000 to 2006 in a new file and the error persist. ncdump info:
dimensions:
    time = UNLIMITED ; // (3074 currently)
    lat = 192 ;
    lon = 288 ;
variables:
    float CO2_flux(time, lat, lon) ;
        CO2_flux:long_name = "CO2 fossil fuel emission flux" ;
        CO2_flux:units = "1e3 g m-2 s-1" ;
        CO2_flux:_FillValue = -999.f ;
        CO2_flux:standard_name = "tendency_of_atmosphere_mass_content_of_carbon_dioxide_due_to_emission" ;
    double time(time) ;
        time:units = "days since 0000-01-01 00:00:00" ;
        time:long_name = "time" ;
        time:calendar = "noleap" ;
        time:_FillValue = -9999. ;
        time:standard_name = "time" ;
    float lat(lat) ;
        lat:typeConversion_op_ncl = "double converted to float" ;
        lat:units = "degrees_north" ;
        lat:long_name = "latitude" ;
        lat:_FillValue = -999.f ;
        lat:standard_name = "latitude" ;
    float lon(lon) ;
        lon:typeConversion_op_ncl = "double converted to float" ;
        lon:units = "degrees_east" ;
        lon:long_name = "longitude" ;
        lon:standard_name = "longitude" ;
    int date(time) ;
        date:units = "current date as yyyymmdd" ;
        date:_FillValue = -999 ;
        date:long_name = "Current date" ;
    int datesec(time) ;
        datesec:units = "s" ;
        datesec:_FillValue = -999 ;
        datesec:long_name = "Time of day" ; Thanks,
 
Top