Contact Linlin Chen for more information and files (linlin.chen@bristol.ac.uk, linlin.chen128@outlook.com).
Figures could be found from: CMIP7_Ozone.pptx
Processed data and scripts could be found from: Siliruan:/home/bridge/mf22281/CMIP7/CMIP7-Ozone
File list ready for HadCM3BL model running:
vmro3*_1-2_185001-185012-clim_73x96x19hybrid_zonmean.ncvmro3*_1-2_182901-184912_73x96x19hybrid_zonmean.ncvmro3*_2-0_182901-202212_73x96x19hybrid_zonmean.ncData description: https://input4mips-cvs.readthedocs.io/en/latest/dataset-overviews/ozone/
Download data from:
The download links would direct you to CMIP7 ozone data version1.2 and version 2.0. But if not, you can search by source_id = FZJ-CMIP-ozone-1-2 and source_id = FZJ-CMIP-ozone-2-0.
Data list:
monC.vmro3.gnmon.vmro3.gnmon.vmro3.gnvmro3*.ncvmro3(time, plev=66, lat=96, lon=144)
vmro3*_73x96.ncvmro3(time, plev=66, lat=73, lon=96)
Siliruan:/home/bridge/mf22281/CMIP7/CMIP7-Ozone/regrid.shcheck metadata:
ncdump -h input.nc
check lat, lon, plev values:
ncks -H -C -v lat,lon,plev input.nc
cdo sinfo input.nc
cdo showlevel input.nc
nano grid_73x96.txt
gridtype = lonlat
xsize = 96
ysize = 73
xfirst = 0
xinc = 3.75
yfirst = 90
yinc = -2.5
cdo -selname,vmro3 -remapbil,grid_73x96.txt input.nc output_73x96.nc
vmro3 is intensive variable, so choose bilinear method to convert lat and lon.
In theory, surface pressure data should be the actual values on a month-by-month basis throughout the period 1850-2013. However, for simplicity, we will use the climatological averages. This is also better as it makes the future scenarios straightforward too.
Siliruan:swsvalde/ummodel/data/obsel/climate/obsela.pdcljan.nc (and similarly for other months)p_mm_srf(t=1, surface=1, latitude=73, longitude=96) (Pa)Siliruan:/home/bridge/mf22281/CMIP7/CMIP7-Ozone/surface_pressure/ps_12mon.ncps(time=12, lat=73, lon=96) (Pa)Siliruan:/home/bridge/mf22281/CMIP7/CMIP7-Ozone/merge_files.shncrcat -O input1.nc input2.nc output.nc
pres2hybrid_Wrap function. At each latitude, longitude and level (lev[k]) pressures are computed using: p(k) = A(k)*P0 + B(k)*PS. (See NCL: pres2hybrid for more information.)vmro3*_73x96.ncvmro3(time, plev=66, lat=73, lon=96)vmro3*_73x96x19hybrid.ncvmro3(time, hybrid_eta_x1000=19, lat=73, lon=96)Siliruan:/home/bridge/mf22281/CMIP7/CMIP7-Ozone/pres2hybrid_zonmean_vmro3.ncl; Siliruan:/home/bridge/mf22281/CMIP7/CMIP7-Ozone/run_pres2hybrid_zonmean_vmro3_ncl.shvmro3_hyb = pres2hybrid_Wrap(plev, ps_full, p0, o3, A, B, intflg)
; output dims: (time,hybrid,lat,lon)
where,
plev: based on vmro3(plev). Convert unit from hPa to Pa (plev=plev*100), then reverse order from bottom->top to top->bottom (plev=plev(::-1).ps_full: surface pressure. based on ps(12,lat,lon)(Pa). Expand time dimension from 12 month to targeted 12*years dimension.p0=100000.0 Pao3: vmro3A: coefficient A=AP/p0. A is model dependent. For HadCM3B,
AP = (/ \
0.00000000000000E+00, 0.00000000000000E+00, 0.00000000000000E+00, 0.00000000000000E+00, \
0.47251826759436E+03, 0.24080372627472E+04, 0.58093227790796E+04, 0.94699333641095E+04, \
0.12323530274880E+05, 0.14006976046769E+05, 0.14688062426321E+05, 0.14577724933620E+05, \
0.13660085920729E+05, 0.11801444655940E+05, 0.88617287598797E+04, 0.55294175974212E+04, \
0.29594332110381E+04, 0.14797166055190E+04, 0.46058805420888E+03 /)
Reverse A to top->bottom order (A=A(::-1)
B: coefficient B. Bis model dependent. For HadCM3B,
B = (/ \
0.99699892520659E+00, 0.97495591297058E+00, 0.93041678475353E+00, 0.86983230217049E+00, \
0.78750330272592E+00, 0.67549398891862E+00, 0.54141001935591E+00, 0.40982251224795E+00, \
0.29886781207532E+00, 0.21462797853660E+00, 0.15287099931014E+00, 0.10392452480327E+00, \
0.63025956286467E-01, 0.31486806956303E-01, 0.10629490630593E-01, 0.15600687762778E-02, \
0.00000000000000E+00, 0.00000000000000E+00, 0.00000000000000E+00 /)
Reverse B to top->bottom order (B=B(::-1)
intflg=1, values set to nearest valid valueAlso set vertical hybrid levels, which could be found in any ozone ancil file, e.g., tdezc1.qrclim.ozone.nc, hybrid_p_x1000(hybrid_p_x1000=19).
For HadCM3B,
hybrid_eta_x1000 = (/ \
996.996, 974.867, 930.25, 869.8323, 792.2285, 699.5743, 599.5032, \
504.5218, 422.103, 354.6977, 299.7516, 249.7017, 199.6268, \
149.5012, 99.24676, 56.85421, 29.59433, 14.79717, 4.605881 /)
Reverse hybrid_eta_x1000 to top->bottom order (hybrid_eta_x1000=(::-1))
vmro3*_73x96x19hybrid.ncvmro3(time, hybrid_eta_x1000=19, lat=73, lon=96)vmro3*73x96x19hybrid_zonmean.ncO3(time, hybrid_eta_x1000=19, lat=73)Siliruan:/home/bridge/mf22281/CMIP7/CMIP7-Ozone/pres2hybrid_zonmean_vmro3.ncl; Siliruan:/home/bridge/mf22281/CMIP7/CMIP7-Ozone/run_pres2hybrid_zonmean_vmro3_ncl.shO3 = dim_avg_n_Wrap(vmro3_hyb, 3)
; (time,hybrid_eta_x1000,lat)
or use CDO:
cdo -zonmean \
-selname,vmro3 \
input.nc output_zonmean.nc
The original file size is too large. So prefer convert before merge them into one single file.
cdo -O mergetime \
input_182901-184912_72x96x19hybrid_zonmean.nc \
input_185001-189912_72x96x19hybrid_zonmean.nc \
input_190001-194912_72x96x19hybrid_zonmean.nc \
input_195001-199912_72x96x19hybrid_zonmean.nc \
input_200001-202212_72x96x19hybrid_zonmean.nc \
output_182901-202212_72x96x19hybrid_zonmean.nc
mergetime concatenates along time and will sort by time if needed.
script: Siliruan:/home/bridge/mf22281/CMIP7/CMIP7-Ozone/mergetime.sh; Siliruan:/home/bridge/mf22281/CMIP7/CMIP7-Ozone/run_pres2hybrid_zonmean_vmro3_ncl.sh