Closed nocollier closed 1 year ago
Hi Nate
For Gruber, I used the standard one (vertically integrated) [image: image.png] OCIM data is from the author's website (at the bottom of the page there is a dropbox link). Models and Data Products – UCSB Ocean Circulation and biogeochemistry lab https://tdevries.eri.ucsb.edu/models-and-data-products/
To compare anthropogenic carbon is a bit complex. The natural DIC (dissicnat) is subtracted from the total DIC (dissic) to acquire the anthropogenic part. However, the dissicnat variable is not available for the CMIP5 models and some of the CMIP6 models. I used a hierarchical model (the code from R) to fill the gap in the paper. For now, I think we may compare the models with both 'dissic' and 'dissicnat' variables.
Best Weiwei
On Tue, Jun 6, 2023 at 7:43 AM nocollier @.***> wrote:
- I found Gruber data https://urldefense.com/v3/__https://www.ncei.noaa.gov/access/ocean-carbon-acidification-data-system/oceans/ndp_100/ndp100.html__;!!CzAuKJ42GuquVTTmVmPViYEvSg!KqcJzkHXUscLKSEHVGcu1Cehcptp1Y26bIa-3ACyzMTZ13LzEQ5YlyQOOP7enIPv7kjRNLr1O1AgQEP9TICqTcoa$, but which one do we want? There is a 3D field and a vertically integrated field but 13 different 'versions' of each.
- I found a paper https://urldefense.com/v3/__https://cdiac.ess-dive.lbl.gov/ftp/oceans/Model_results/OCIM_DeVries/devries_gbc_14.pdf__;!!CzAuKJ42GuquVTTmVmPViYEvSg!KqcJzkHXUscLKSEHVGcu1Cehcptp1Y26bIa-3ACyzMTZ13LzEQ5YlyQOOP7enIPv7kjRNLr1O1AgQEP9TDhIQNwm$ on OCIM but no data. Where is this data?
- To what do we compare this in the models? I can't find 'anthropogenic' in ESGF ocean variable standard names nor 'Cant'.
— Reply to this email directly, view it on GitHub https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1578901599__;Iw!!CzAuKJ42GuquVTTmVmPViYEvSg!KqcJzkHXUscLKSEHVGcu1Cehcptp1Y26bIa-3ACyzMTZ13LzEQ5YlyQOOP7enIPv7kjRNLr1O1AgQEP9TH4p7xr1$, or unsubscribe https://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/AB27GWLD7YXQ77R22KMCXE3XJ46ZTANCNFSM6AAAAAAY4QTFLU__;!!CzAuKJ42GuquVTTmVmPViYEvSg!KqcJzkHXUscLKSEHVGcu1Cehcptp1Y26bIa-3ACyzMTZ13LzEQ5YlyQOOP7enIPv7kjRNLr1O1AgQEP9TOcBWFGv$ . You are receiving this because you were mentioned.Message ID: @.***>
Ok, let's focus on OCIM. I found the link, many thanks.
dic0(depth,lat,lon)
and the annual industrial dic(year,depth,lat,lon)
. I understand that we are comparing dic-dic0
and I get that not every model will have both variables. I am not concerned about this at the moment.model version
in the dimensions of the raw data. Am I just to choose one, say the first? Or did you take a mean?umol kg-1
, we can get to volume units by multiplying by the density of seawater, 1.025 kg m-3
, but this leaves us with units of umol m-3
and your output shows mol m-2
. So we lose a m
somehow. This suggests to me that you are integrating to some depth?On Wed, Jun 7, 2023 at 8:38 AM nocollier @.***> wrote:
Ok, let's focus on OCIM. I found the link, many thanks.
- I create a gridded product with this script https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/blob/main/OCIM/convert.py__;!!CzAuKJ42GuquVTTmVmPViYEvSg!KJZVJ5C-5JWI6rjQFbVZlfx1-h73lPjWAH_JVYm37s2Os90ug2uin8vMI4UpsLjxSd_3SdUxgJ5nOZj9xwul8TP5$. What I end up with is the pre-industrial dic0(depth,lat,lon) and the annual industrial dic(year,depth,lat,lon). I understand that we are comparing dic-dic0 and I get that not every model will have both variables. I am not concerned about this at the moment.
Ok, no probelm.
- I see a model version in the dimensions of the raw data. Am I just to choose one, say the first? Or did you take a mean?
I usually choose the first one to compare. The internal variability across the model versions is small as compared to other variabilities.
- I see that your comparison is 1994-2007 and it appears to be a mean across that time period. So I will select just those years and compute a mean and then add time bounds across those years?
Yes, the Gruber data spans only the period of 1994-2007. To be consistent, I extracted the model output for the same period.
- What did you do with depth? Is it the surface? Or is it integrated to a depth?
I integrated the DIC in the vertical: sum(dic*(layer thickness)) for the first 3000 m.
- The units of the reference data are umol kg-1, we can get to volume units by multiplying by the density of seawater, 1.025 kg m-3, but this leaves us with units of umol m-3 and your output https://urldefense.com/v3/__https://www.ilamb.org/CMIP5v6/IOMB_AR6/Carbon/AnthropogenicDIC1994-2007/OCIM/OCIM.html__;!!CzAuKJ42GuquVTTmVmPViYEvSg!KJZVJ5C-5JWI6rjQFbVZlfx1-h73lPjWAH_JVYm37s2Os90ug2uin8vMI4UpsLjxSd_3SdUxgJ5nOZj9xwqGz_v-$ shows mol m-2. So we lose a m somehow. This suggests to me that you are integrating to some depth?
umol m-3 is the DIC concentration, multiplied by layer thickness will give the unit umol m-2.
Best Weiwei
— Reply to this email directly, view it on GitHub https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1581080297__;Iw!!CzAuKJ42GuquVTTmVmPViYEvSg!KJZVJ5C-5JWI6rjQFbVZlfx1-h73lPjWAH_JVYm37s2Os90ug2uin8vMI4UpsLjxSd_3SdUxgJ5nOZj9x4On4rHw$, or unsubscribe https://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/AB27GWKOTVS5LITEB5YDQALXKCN6BANCNFSM6AAAAAAY4QTFLU__;!!CzAuKJ42GuquVTTmVmPViYEvSg!KJZVJ5C-5JWI6rjQFbVZlfx1-h73lPjWAH_JVYm37s2Os90ug2uin8vMI4UpsLjxSd_3SdUxgJ5nOZj9x-IkE-cO$ . You are receiving this because you were mentioned.Message ID: @.***>
Hi Nate
There must be some unit problems. The code looks correct to me. I think we can try the OCIM data. For the OCIM, Cant is simply calculated as DIC_2007-DIC_1994. I was wondering if the sum of (DIC*layer_depths) from OCIM gives the right values.
Best Weiwei
On Tue, Jun 13, 2023 at 8:52 AM nocollier @.***> wrote:
So, I am unable to sort out what I am doing wrong. Take a look at my code https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/blob/main/OCIM/convert.py__;!!CzAuKJ42GuquVTTmVmPViYEvSg!I3PQ8PJTUViqzn6KbIe9eHQQNggkQe1pUlWwPJpoqc6Ilip4iKd6nM9o5QRTCGqWPix1GiJyD_bbUb-WQa63JU4V$ and see if you can find a mistake. I get the same pattern as your result here https://urldefense.com/v3/__https://www.ilamb.org/CMIP5v6/IOMB_AR6/Carbon/AnthropogenicDIC1994-2007/OCIM/OCIM.html__;!!CzAuKJ42GuquVTTmVmPViYEvSg!I3PQ8PJTUViqzn6KbIe9eHQQNggkQe1pUlWwPJpoqc6Ilip4iKd6nM9o5QRTCGqWPix1GiJyD_bbUb-WQd0ib13i$ but the values are off by ~300. See this plot: [image: OCIM_nate] https://urldefense.com/v3/__https://user-images.githubusercontent.com/1331463/245532813-394e6705-a546-4623-b00f-f4ab6343ca60.png__;!!CzAuKJ42GuquVTTmVmPViYEvSg!I3PQ8PJTUViqzn6KbIe9eHQQNggkQe1pUlWwPJpoqc6Ilip4iKd6nM9o5QRTCGqWPix1GiJyD_bbUb-WQQYBRr1x$
Let's try to have a chat about it today if a simple error doesn't strike you?
— Reply to this email directly, view it on GitHub https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1589587146__;Iw!!CzAuKJ42GuquVTTmVmPViYEvSg!I3PQ8PJTUViqzn6KbIe9eHQQNggkQe1pUlWwPJpoqc6Ilip4iKd6nM9o5QRTCGqWPix1GiJyD_bbUb-WQXHivsD4$, or unsubscribe https://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/AB27GWOM7PRGMU64PXL2J3LXLCECFANCNFSM6AAAAAAY4QTFLU__;!!CzAuKJ42GuquVTTmVmPViYEvSg!I3PQ8PJTUViqzn6KbIe9eHQQNggkQe1pUlWwPJpoqc6Ilip4iKd6nM9o5QRTCGqWPix1GiJyD_bbUb-WQSJ-25U-$ . You are receiving this because you were mentioned.Message ID: @.***>
I am open to a units issue, but where is the problem? As far as I know I have performed the unit translations correctly.
umol kg-1
kg m-3
to move to a volumetric concentrationmol m-3
and when we integrate to a depth of 3000 [m], mol m-2
Maybe I have defined Cant incorrectly? I am computing a time series by subtracting the pre-industrial data from the industrial and then computing a mean of that series from 1994-1997:
int( dicind - dicpre, 1994, 2007 ) / 14 years
What you typed there at the end suggests to me that I should be defining Cant as:
int( dicind - dicind[1994], 1994, 2007 ) / 14
Remember that I am ocean ignorant :D
hi Nate it’s cumulative carbon, no need to be divided by 14.
best weiwei
Best Weiwei
From: nocollier @.> Sent: Tuesday, June 13, 2023 11:09:09 AM To: rubisco-sfa/IOMB-Data @.> Cc: Weiwei Fu @.>; Mention @.> Subject: Re: [rubisco-sfa/IOMB-Data] Add OCIM and Gruber (Issue #4)
I am open to a units issue, but where is the problem? As far as I know I have performed the unit translations correctly.
Maybe I have defined Cant incorrectly? I am computing a time series by subtracting the pre-industrial data from the industrial and then computing a mean of that series from 1994-1997:
int( dicind - dicpre, 1994, 2007 ) / 14 years
What you typed there at the end suggests to me that I should be defining Cant as:
int( dicind - dicind[1994], 1994, 2007 ) / 14
Remember that I am ocean ignorant :D
— Reply to this email directly, view it on GitHubhttps://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1589799880__;Iw!!CzAuKJ42GuquVTTmVmPViYEvSg!OVQ4wvudJQNPoJbOJ_YRf_cgUk322AwjkH7fwJdX4u0im2hU0pWtCMP6niwhmtF32VJwoN2v5t8qR2B1cj1lLF4Z$, or unsubscribehttps://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/AB27GWNP27CDANEZRLNCALLXLCUELANCNFSM6AAAAAAY4QTFLU__;!!CzAuKJ42GuquVTTmVmPViYEvSg!OVQ4wvudJQNPoJbOJ_YRf_cgUk322AwjkH7fwJdX4u0im2hU0pWtCMP6niwhmtF32VJwoN2v5t8qR2B1cmTORKQv$. You are receiving this because you were mentioned.Message ID: @.***>
It is still wrong,
Can you please, as we discussed, send your conversion scripts or write out precisely what you did? I do not have time to keep guessing what you did and I want to get this finished.
Hi Nate
I found my script written years ago (pasted below). It is a little messy. I highlighted 2 two lines to compute vertical integrated carbon (unit: mol/m2). We can jump on a zoom meeting if it is still wrong. I had several meetings yesterday, but today is ok.
Best Weiwei
def plotz(ocim=None,ogru=None,dich=None,dicp=None,cmip=6,wrt=None,smth=None,r_0=None): regs=['sGLB','sATL','sIND','sPAC','sSO'] if cmip == 6:
tL={'1994s':slice(14,28),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)} else: # tL={'1994s':slice(14,26),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
tL={'1994s':slice(14,26),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)} cols = mycols() dicinv = {}
dich = collections.OrderedDict(sorted(dich.items())) plt.close('all')
fig, ax = plt.subplots(nrows=1,ncols=len(regs),figsize=(13,3.5)) fig.tight_layout()
cnt = 0 sf = 1 sl = -1 tupleA = () for k,v in dich.items(): dicinv[k] = []
print('now model ',k)
if v['info'][5] == 'gr':
# dic = np.roll(v['dissic'],180,axis=-1)*1e3
dic =
(v[v['info'][0]][tL['1994s']]-dicp[k][dicp[k]['info'][0]][tL['1994s']])*1e3
else:
dic =
(v[v['info'][0]][tL['1994s']]-dicp[k][dicp[k]['info'][0]][tL['1994s']])*1e3
sdep = v['lev_bnds'][:,1] - v['lev_bnds'][:,0]
# find the index for 3000 m
i3000 = np.argmin(abs(v['lev']-3000))
print('level ',i3000,' at the depth of ',v['lev'][i3000])
d1 = slice(0,i3000+1) # cmip 0-3000m
# tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]).sum()/1e3*12/1e15
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]).sum()/1e312/1e15 tmp2d = (dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim['sGLB']).sum()/1e312/1e15 tmp2d0 = (dic[0:sf:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim['sGLB']).sum()/1e3*12/1e15 print(k+' total anthro carbon is ',tmp2d-tmp2d0) dicinv[k].append(tmp2d-tmp2d0)
tmp2e =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3 tmp2e0 = (dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3 if smth is None: dif = tmp2e - tmp2e0 else: dif = smth9(tmp2e - tmp2e0,sigma_y=2,sigma_x=2) if wrt is not None: if r_0 is None: iomb_dif = dif else: print('Caution: negative values are replaced') iomb_dif = np.where(dif<0,0.0,dif) if cmip == 6: outf = '/DFS-L/SCRATCH/moore/weiweif/IOMB_data/MODELS/'+k+'/'+'cantinv'+k+'.nc' else: outf = '/DFS-L/SCRATCH/moore/weiweif/IOMB_CMIP5/MODELS/'+k+'/'+'cantinv'+k+'.nc' tonc_inv(outf,ocim['slat'][:,0],ocim['slon'][0,:],iomb_dif) else: iomb_dif = 0 tupleA = tupleA + (iomb_dif,)
for l,w in enumerate(regs):
print('now in '+w+' index '+str(l))
cols = mycols()
if w == 'sGLB':
tmp = ((dic[sl:,...].mean(axis=0))).mean(axis=(1,2))
tmp0 = (dic[0,...]).mean(axis=(1,2))
else:
tmp = ((dic[sl:,...].mean(axis=0))*ocim[w]).mean(axis=(1,2))
tmp0 = (dic[0,...]*ocim[w]).mean(axis=(1,2))
tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim[w]).sum()/1e312/1e15 tmp2d0 = (dic[0:sf,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim[w]).sum()/1e312/1e15 dicinv[k].append(tmp2d-tmp2d0) ax[l].plot(tmp-tmp0,-1*v['lev'],color=cols[cnt],label=k)
cnt = cnt + 1
enxy = np.ma.stack(tupleA,axis=0) if wrt is not None: outf = '/DFS-L/SCRATCH/moore/weiweif/IOMB_data/MODELS/meanCMIP'+str(cmip)+'/'+'cant_inv_meanCMIP.nc' tonc_inv(outf,ocim['slat'][:,0],ocim['slon'][0,:],enxy.mean(axis=0)) print('get ocim dic') dicinv['obs_OCIM'] = []
if cmip == 6: dic = ocim['dicind'][214:228,...] #1994-2007 else:
dic = ocim['dicind'][214:228,...] #1994-2007
sdep = ocim['sdep'][:,0,0] tmp2d = (dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15 tmp2d0 = (dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
((dic[-1,...]-dic[0,...])sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
(dic[0:2:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]).sum()/1e3*12/1e15 print('OCIM total anthro carbon is ',tmp2d-tmp2d0) dicinv['obs_OCIM'].append(tmp2d-tmp2d0)
tmp2e = (dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3 tmp2e0 = (dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3 print(tmp2e.shape) if wrt is not None: fname = 'cant_inv_OCIM.nc' if os.path.isfile(fname) is False:
tonc_inv('cant_inv_OCIM.nc',ocim['slat'][:,0],ocim['slon'][0,:],tmp2e-tmp2e0) for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) if w == 'sGLB': tmp = ((dic[sl:,...].mean(axis=0))).mean(axis=(1,2)) tmp0 = (dic[0,...]).mean(axis=(1,2)) else: tmp = ((dic[sl:,...].mean(axis=0))ocim[w]).mean(axis=(1,2)) tmp0 = (dic[0,...]ocim[w]).mean(axis=(1,2)) tmp2d = (dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15 tmp2d0 = (dic[0:sf,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
((dic[-1,...]-dic[0,...])sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
# tmp2d0 =
(dic[0:2,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15 dicinv['obs_OCIM'].append(tmp2d-tmp2d0)
ax[l].plot(tmp-tmp0,-1ocim['slev'][:,0,0],label='OCIM',linewidth=2,color='k') print('get gruber dic') dicinv['obs_Gruber']=[33.7,7.1,13.2,11.9] if wrt is not None: fname = 'cant_inv_Gruber.nc' if os.path.isfile(fname) is False: tonc_inv(fname,ocim['slat'][:,0],ocim['slon'][0,:],ogru['dicinv']) dic = ogru['dissic'] for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) if w == 'sGLB': tmp = dic.mean(axis=(1,2)) else: tmp = (dicocim[w]).mean(axis=(1,2)) ax[l].plot(tmp,-1*ogru['lev'],label='Gruber et al 2019',linewidth=2,color='k',linestyle='--') for i in range(0,len(regs)): ax[i].set_ylim([-5000,0]) ax[i].set_xlim([-1,15]) ax[i].title.set_text(regs[i][1:]) ax[3].legend(loc=0) plt.show(block=False)
return fig,dicinv,enxy
On Wed, Jun 14, 2023 at 7:46 AM nocollier @.***> wrote:
It is still wrong,
Can you please, as we discussed, send your conversion scripts or write out precisely what you did? I do not have time to keep guessing what you did and I want to get this finished.
— Reply to this email directly, view it on GitHub https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1591372983__;Iw!!CzAuKJ42GuquVTTmVmPViYEvSg!JCLz6qbx7YJYSQdW-z4FcxUWcRQ_79zqqoVioQMj60djvhNln25YFEjREvnjwgTqMx2cA7XGLuFDYIykhm2rMxai$, or unsubscribe https://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/AB27GWJLWIXNV77GFJAC3YLXLHFEXANCNFSM6AAAAAAY4QTFLU__;!!CzAuKJ42GuquVTTmVmPViYEvSg!JCLz6qbx7YJYSQdW-z4FcxUWcRQ_79zqqoVioQMj60djvhNln25YFEjREvnjwgTqMx2cA7XGLuFDYIykhjMUnESa$ . You are receiving this because you were mentioned.Message ID: @.***>
Many thanks, if you can email me that file instead it would be great. The paste messed up the formatting and I would rather not fix it.
Thanks, Nate
On Wed, Jun 14, 2023 at 12:20 PM Weiwei Fu @.***> wrote:
Hi Nate
I found my script written years ago (pasted below). It is a little messy. I highlighted 2 two lines to compute vertical integrated carbon (unit: mol/m2). We can jump on a zoom meeting if it is still wrong. I had several meetings yesterday, but today is ok.
Best Weiwei
def plotz(ocim=None,ogru=None,dich=None,dicp=None,cmip=6,wrt=None,smth=None,r_0=None):
regs=['sGLB','sATL','sIND','sPAC','sSO'] if cmip == 6:
tL={'1994s':slice(14,28),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
else: # tL={'1994s':slice(14,26),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
tL={'1994s':slice(14,26),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
cols = mycols() dicinv = {}
dich = collections.OrderedDict(sorted(dich.items())) plt.close('all')
fig, ax = plt.subplots(nrows=1,ncols=3,figsize=(8,3))
fig, ax = plt.subplots(nrows=1,ncols=len(regs),figsize=(13,3.5)) fig.tight_layout()
cnt = 0 sf = 1 sl = -1 tupleA = () for k,v in dich.items(): dicinv[k] = []
if 'cm' in k:
print('now model ',k) if v['info'][5] == 'gr':
dic = np.roll(v['dissic'],180,axis=-1)*1e3
dic = (v[v['info'][0]][tL['1994s']]-dicp[k][dicp[k]['info'][0]][tL['1994s']])*1e3
to mmol/m3
else: dic = (v[v['info'][0]][tL['1994s']]-dicp[k][dicp[k]['info'][0]][tL['1994s']])*1e3
to mmol/m3
sdep = v['lev_bnds'][:,1] - v['lev_bnds'][:,0]
find the index for 3000 m
i3000 = np.argmin(abs(v['lev']-3000)) print('level ',i3000,' at the depth of ',v['lev'][i3000]) d1 = slice(0,i3000+1) # cmip 0-3000m
tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]).sum()/1e3*12/1e15
tmp2d0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]).sum()/1e3*12/1e15
tmp2d = (dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d0 = (dic[0:sf:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
print(k+' total anthro carbon is ',tmp2d-tmp2d0) dicinv[k].append(tmp2d-tmp2d0)
tmp2e = (dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3 tmp2e0 = (dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3
if smth is None: dif = tmp2e - tmp2e0 else: dif = smth9(tmp2e - tmp2e0,sigma_y=2,sigma_x=2) if wrt is not None: if r_0 is None: iomb_dif = dif else: print('Caution: negative values are replaced') iomb_dif = np.where(dif<0,0.0,dif) if cmip == 6: outf = '/DFS-L/SCRATCH/moore/weiweif/IOMB_data/MODELS/'+k+'/'+'cantinv'+k+'.nc' else: outf = '/DFS-L/SCRATCH/moore/weiweif/IOMB_CMIP5/MODELS/'+k+'/'+'cantinv'+k+'.nc'
tonc_inv(outf,ocim['slat'][:,0],ocim['slon'][0,:],iomb_dif) else: iomb_dif = 0 tupleA = tupleA + (iomb_dif,)
for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) cols = mycols() if w == 'sGLB': tmp = ((dic[sl:,...].mean(axis=0))).mean(axis=(1,2)) tmp0 = (dic[0,...]).mean(axis=(1,2)) else: tmp = ((dic[sl:,...].mean(axis=0))ocim[w]).mean(axis=(1,2)) tmp0 = (dic[0,...]ocim[w]).mean(axis=(1,2)) tmp2d = (dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d0 = (dic[0:sf,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim[w]).sum()/1e312/1e15
dicinv[k].append(tmp2d-tmp2d0) ax[l].plot(tmp-tmp0,-1*v['lev'],color=cols[cnt],label=k)
ax[l].set_ylim(ylim[::-1])
cnt = cnt + 1
enxy = np.ma.stack(tupleA,axis=0) if wrt is not None: outf = '/DFS-L/SCRATCH/moore/weiweif/IOMB_data/MODELS/meanCMIP'+str(cmip)+'/'+'cant_inv_meanCMIP.nc'
tonc_inv(outf,ocim['slat'][:,0],ocim['slon'][0,:],enxy.mean(axis=0)) print('get ocim dic') dicinv['obs_OCIM'] = []
ocim starts from 1780. 1980 corresponds to 200 1994: 214: 2007:227
if cmip == 6: dic = ocim['dicind'][214:228,...] #1994-2007 else:
dic = ocim['dicind'][214:226,...] #1994-2005
dic = ocim['dicind'][214:228,...] #1994-2007 sdep = ocim['sdep'][:,0,0] tmp2d = (dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d0 = (dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d =
((dic[-1,...]-dic[0,...])sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d0 = 0
tmp2d0 =
(dic[0:2:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]).sum()/1e3*12/1e15
print('OCIM total anthro carbon is ',tmp2d-tmp2d0) dicinv['obs_OCIM'].append(tmp2d-tmp2d0)
tmp2e = (dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3 tmp2e0 = (dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3
print(tmp2e.shape) if wrt is not None: fname = 'cant_inv_OCIM.nc' if os.path.isfile(fname) is False:
tonc_inv('cant_inv_OCIM.nc',ocim['slat'][:,0],ocim['slon'][0,:],tmp2e-tmp2e0)
for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) if w == 'sGLB': tmp = ((dic[sl:,...].mean(axis=0))).mean(axis=(1,2)) tmp0 = (dic[0,...]).mean(axis=(1,2)) else: tmp = ((dic[sl:,...].mean(axis=0))ocim[w]).mean(axis=(1,2)) tmp0 = (dic[0,...]ocim[w]).mean(axis=(1,2)) tmp2d = (dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d0 = (dic[0:sf,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d =
((dic[-1,...]-dic[0,...])sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d0 = 0
tmp2d0 =
(dic[0:2,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
dicinv['obs_OCIM'].append(tmp2d-tmp2d0)
ax[l].plot(tmp-tmp0,-1*ocim['slev'][:,0,0],label='OCIM',linewidth=2,color='k')
print('get gruber dic') dicinv['obs_Gruber']=[33.7,7.1,13.2,11.9] if wrt is not None: fname = 'cant_inv_Gruber.nc' if os.path.isfile(fname) is False: tonc_inv(fname,ocim['slat'][:,0],ocim['slon'][0,:],ogru['dicinv']) dic = ogru['dissic'] for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) if w == 'sGLB': tmp = dic.mean(axis=(1,2)) else: tmp = (dicocim[w]).mean(axis=(1,2)) ax[l].plot(tmp,-1ogru['lev'],label='Gruber et al 2019',linewidth=2,color='k',linestyle='--') for i in range(0,len(regs)): ax[i].set_ylim([-5000,0]) ax[i].set_xlim([-1,15]) ax[i].title.set_text(regs[i][1:]) ax[3].legend(loc=0) plt.show(block=False)
return fig,dicinv,enxy
On Wed, Jun 14, 2023 at 7:46 AM nocollier @.***> wrote:
It is still wrong,
Can you please, as we discussed, send your conversion scripts or write out precisely what you did? I do not have time to keep guessing what you did and I want to get this finished.
— Reply to this email directly, view it on GitHub < https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1591372983__;Iw!!CzAuKJ42GuquVTTmVmPViYEvSg!JCLz6qbx7YJYSQdW-z4FcxUWcRQ_79zqqoVioQMj60djvhNln25YFEjREvnjwgTqMx2cA7XGLuFDYIykhm2rMxai$>,
. You are receiving this because you were mentioned.Message ID: @.***>
— Reply to this email directly, view it on GitHub https://github.com/rubisco-sfa/IOMB-Data/issues/4#issuecomment-1591592366, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAKFCB5KTMFDIFUIBY2HFMLXLHQDTANCNFSM6AAAAAAY4QTFLU . You are receiving this because you authored the thread.Message ID: @.***>
I copied the script to a file.
On Wed, Jun 14, 2023 at 9:30 AM nocollier @.***> wrote:
Many thanks, if you can email me that file instead it would be great. The paste messed up the formatting and I would rather not fix it.
Thanks, Nate
On Wed, Jun 14, 2023 at 12:20 PM Weiwei Fu @.***> wrote:
Hi Nate
I found my script written years ago (pasted below). It is a little messy. I highlighted 2 two lines to compute vertical integrated carbon (unit: mol/m2). We can jump on a zoom meeting if it is still wrong. I had several meetings yesterday, but today is ok.
Best Weiwei
def
plotz(ocim=None,ogru=None,dich=None,dicp=None,cmip=6,wrt=None,smth=None,r_0=None):
regs=['sGLB','sATL','sIND','sPAC','sSO'] if cmip == 6:
tL={'1994s':slice(14,28),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
else: #
tL={'1994s':slice(14,26),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
tL={'1994s':slice(14,26),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
cols = mycols() dicinv = {}
dich = collections.OrderedDict(sorted(dich.items())) plt.close('all')
fig, ax = plt.subplots(nrows=1,ncols=3,figsize=(8,3))
fig, ax = plt.subplots(nrows=1,ncols=len(regs),figsize=(13,3.5)) fig.tight_layout()
cnt = 0 sf = 1 sl = -1 tupleA = () for k,v in dich.items(): dicinv[k] = []
if 'cm' in k:
print('now model ',k) if v['info'][5] == 'gr':
dic = np.roll(v['dissic'],180,axis=-1)*1e3
dic =
(v[v['info'][0]][tL['1994s']]-dicp[k][dicp[k]['info'][0]][tL['1994s']])*1e3
to mmol/m3
else: dic =
(v[v['info'][0]][tL['1994s']]-dicp[k][dicp[k]['info'][0]][tL['1994s']])*1e3
to mmol/m3
sdep = v['lev_bnds'][:,1] - v['lev_bnds'][:,0]
find the index for 3000 m
i3000 = np.argmin(abs(v['lev']-3000)) print('level ',i3000,' at the depth of ',v['lev'][i3000]) d1 = slice(0,i3000+1) # cmip 0-3000m
tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]).sum()/1e3*12/1e15
tmp2d0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]).sum()/1e3*12/1e15
tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
print(k+' total anthro carbon is ',tmp2d-tmp2d0) dicinv[k].append(tmp2d-tmp2d0)
tmp2e =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3 tmp2e0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3
if smth is None: dif = tmp2e - tmp2e0 else: dif = smth9(tmp2e - tmp2e0,sigma_y=2,sigma_x=2) if wrt is not None: if r_0 is None: iomb_dif = dif else: print('Caution: negative values are replaced') iomb_dif = np.where(dif<0,0.0,dif) if cmip == 6: outf =
'/DFS-L/SCRATCH/moore/weiweif/IOMB_data/MODELS/'+k+'/'+'cantinv'+k+'.nc' else: outf =
'/DFS-L/SCRATCH/moore/weiweif/IOMB_CMIP5/MODELS/'+k+'/'+'cantinv'+k+'.nc'
tonc_inv(outf,ocim['slat'][:,0],ocim['slon'][0,:],iomb_dif) else: iomb_dif = 0 tupleA = tupleA + (iomb_dif,)
for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) cols = mycols() if w == 'sGLB': tmp = ((dic[sl:,...].mean(axis=0))).mean(axis=(1,2)) tmp0 = (dic[0,...]).mean(axis=(1,2)) else: tmp = ((dic[sl:,...].mean(axis=0))ocim[w]).mean(axis=(1,2)) tmp0 = (dic[0,...]ocim[w]).mean(axis=(1,2)) tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d0 =
(dic[0:sf,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim[w]).sum()/1e312/1e15
dicinv[k].append(tmp2d-tmp2d0) ax[l].plot(tmp-tmp0,-1*v['lev'],color=cols[cnt],label=k)
ax[l].set_ylim(ylim[::-1])
cnt = cnt + 1
enxy = np.ma.stack(tupleA,axis=0) if wrt is not None: outf =
'/DFS-L/SCRATCH/moore/weiweif/IOMB_data/MODELS/meanCMIP'+str(cmip)+'/'+'cant_inv_meanCMIP.nc'
tonc_inv(outf,ocim['slat'][:,0],ocim['slon'][0,:],enxy.mean(axis=0)) print('get ocim dic') dicinv['obs_OCIM'] = []
ocim starts from 1780. 1980 corresponds to 200 1994: 214: 2007:227
if cmip == 6: dic = ocim['dicind'][214:228,...] #1994-2007 else:
dic = ocim['dicind'][214:226,...] #1994-2005
dic = ocim['dicind'][214:228,...] #1994-2007 sdep = ocim['sdep'][:,0,0] tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d =
((dic[-1,...]-dic[0,...])sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d0 = 0
tmp2d0 =
(dic[0:2:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]).sum()/1e3*12/1e15
print('OCIM total anthro carbon is ',tmp2d-tmp2d0) dicinv['obs_OCIM'].append(tmp2d-tmp2d0)
*tmp2e =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3 tmp2e0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3*
print(tmp2e.shape) if wrt is not None: fname = 'cant_inv_OCIM.nc' if os.path.isfile(fname) is False:
tonc_inv('cant_inv_OCIM.nc',ocim['slat'][:,0],ocim['slon'][0,:],tmp2e-tmp2e0)
for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) if w == 'sGLB': tmp = ((dic[sl:,...].mean(axis=0))).mean(axis=(1,2)) tmp0 = (dic[0,...]).mean(axis=(1,2)) else: tmp = ((dic[sl:,...].mean(axis=0))ocim[w]).mean(axis=(1,2)) tmp0 = (dic[0,...]ocim[w]).mean(axis=(1,2)) tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d0 =
(dic[0:sf,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d =
((dic[-1,...]-dic[0,...])sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d0 = 0
tmp2d0 =
(dic[0:2,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
dicinv['obs_OCIM'].append(tmp2d-tmp2d0)
ax[l].plot(tmp-tmp0,-1*ocim['slev'][:,0,0],label='OCIM',linewidth=2,color='k')
print('get gruber dic') dicinv['obs_Gruber']=[33.7,7.1,13.2,11.9] if wrt is not None: fname = 'cant_inv_Gruber.nc' if os.path.isfile(fname) is False: tonc_inv(fname,ocim['slat'][:,0],ocim['slon'][0,:],ogru['dicinv']) dic = ogru['dissic'] for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) if w == 'sGLB': tmp = dic.mean(axis=(1,2)) else: tmp = (dicocim[w]).mean(axis=(1,2)) ax[l].plot(tmp,-1ogru['lev'],label='Gruber et al 2019',linewidth=2,color='k',linestyle='--') for i in range(0,len(regs)): ax[i].set_ylim([-5000,0]) ax[i].set_xlim([-1,15]) ax[i].title.set_text(regs[i][1:]) ax[3].legend(loc=0) plt.show(block=False)
return fig,dicinv,enxy
On Wed, Jun 14, 2023 at 7:46 AM nocollier @.***> wrote:
It is still wrong,
[image: OCIM_nate] <
Can you please, as we discussed, send your conversion scripts or write out precisely what you did? I do not have time to keep guessing what you did and I want to get this finished.
— Reply to this email directly, view it on GitHub <
or unsubscribe <
. You are receiving this because you were mentioned.Message ID: @.***>
— Reply to this email directly, view it on GitHub < https://github.com/rubisco-sfa/IOMB-Data/issues/4#issuecomment-1591592366> https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1591592366*3E__;IyU!!CzAuKJ42GuquVTTmVmPViYEvSg!MypS6meNIsgP0FFS4vIRZEKpmes_sQsWx--pQhPsqoIBDXD-KwtlDf1dftavxeJ_yHA-jOlMMO3LH0rlZXZYA_YH$,
or unsubscribe < https://github.com/notifications/unsubscribe-auth/AAKFCB5KTMFDIFUIBY2HFMLXLHQDTANCNFSM6AAAAAAY4QTFLU> https://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/AAKFCB5KTMFDIFUIBY2HFMLXLHQDTANCNFSM6AAAAAAY4QTFLU*3E__;JQ!!CzAuKJ42GuquVTTmVmPViYEvSg!MypS6meNIsgP0FFS4vIRZEKpmes_sQsWx--pQhPsqoIBDXD-KwtlDf1dftavxeJ_yHA-jOlMMO3LH0rlZfbm3PzD$ . You are receiving this because you authored the thread.Message ID: @.***>
— Reply to this email directly, view it on GitHub https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1591609936__;Iw!!CzAuKJ42GuquVTTmVmPViYEvSg!MypS6meNIsgP0FFS4vIRZEKpmes_sQsWx--pQhPsqoIBDXD-KwtlDf1dftavxeJ_yHA-jOlMMO3LH0rlZX5Gt9z9$, or unsubscribe https://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/AB27GWNAUBZX45WJ6A4VIMLXLHRKHANCNFSM6AAAAAAY4QTFLU__;!!CzAuKJ42GuquVTTmVmPViYEvSg!MypS6meNIsgP0FFS4vIRZEKpmes_sQsWx--pQhPsqoIBDXD-KwtlDf1dftavxeJ_yHA-jOlMMO3LH0rlZQt4PldI$ . You are receiving this because you were mentioned.Message ID: @.***>
Yes, I see that. It has line breaks all over that I have to manually fix to look at your script. If you email me the file, then it is not broken. I should not have to fix your script when you can email the file without the line breaks. Thanks.
Nate
On Wed, Jun 14, 2023 at 12:41 PM Weiwei Fu @.***> wrote:
I copied the script to a file.
On Wed, Jun 14, 2023 at 9:30 AM nocollier @.***> wrote:
Many thanks, if you can email me that file instead it would be great. The paste messed up the formatting and I would rather not fix it.
Thanks, Nate
On Wed, Jun 14, 2023 at 12:20 PM Weiwei Fu @.***> wrote:
Hi Nate
I found my script written years ago (pasted below). It is a little messy. I highlighted 2 two lines to compute vertical integrated carbon (unit: mol/m2). We can jump on a zoom meeting if it is still wrong. I had several meetings yesterday, but today is ok.
Best Weiwei
def
plotz(ocim=None,ogru=None,dich=None,dicp=None,cmip=6,wrt=None,smth=None,r_0=None):
regs=['sGLB','sATL','sIND','sPAC','sSO'] if cmip == 6:
tL={'1994s':slice(14,28),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
else: #
tL={'1994s':slice(14,26),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
tL={'1994s':slice(14,26),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
cols = mycols() dicinv = {}
dich = collections.OrderedDict(sorted(dich.items())) plt.close('all')
fig, ax = plt.subplots(nrows=1,ncols=3,figsize=(8,3))
fig, ax = plt.subplots(nrows=1,ncols=len(regs),figsize=(13,3.5)) fig.tight_layout()
cnt = 0 sf = 1 sl = -1 tupleA = () for k,v in dich.items(): dicinv[k] = []
if 'cm' in k:
print('now model ',k) if v['info'][5] == 'gr':
dic = np.roll(v['dissic'],180,axis=-1)*1e3
dic =
(v[v['info'][0]][tL['1994s']]-dicp[k][dicp[k]['info'][0]][tL['1994s']])*1e3
to mmol/m3
else: dic =
(v[v['info'][0]][tL['1994s']]-dicp[k][dicp[k]['info'][0]][tL['1994s']])*1e3
to mmol/m3
sdep = v['lev_bnds'][:,1] - v['lev_bnds'][:,0]
find the index for 3000 m
i3000 = np.argmin(abs(v['lev']-3000)) print('level ',i3000,' at the depth of ',v['lev'][i3000]) d1 = slice(0,i3000+1) # cmip 0-3000m
tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]).sum()/1e3*12/1e15
tmp2d0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]).sum()/1e3*12/1e15
tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
print(k+' total anthro carbon is ',tmp2d-tmp2d0) dicinv[k].append(tmp2d-tmp2d0)
tmp2e =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3
tmp2e0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3
if smth is None: dif = tmp2e - tmp2e0 else: dif = smth9(tmp2e - tmp2e0,sigma_y=2,sigma_x=2) if wrt is not None: if r_0 is None: iomb_dif = dif else: print('Caution: negative values are replaced') iomb_dif = np.where(dif<0,0.0,dif) if cmip == 6: outf =
'/DFS-L/SCRATCH/moore/weiweif/IOMB_data/MODELS/'+k+'/'+'cantinv'+k+'.nc'
else: outf =
'/DFS-L/SCRATCH/moore/weiweif/IOMB_CMIP5/MODELS/'+k+'/'+'cantinv'+k+'.nc'
tonc_inv(outf,ocim['slat'][:,0],ocim['slon'][0,:],iomb_dif) else: iomb_dif = 0 tupleA = tupleA + (iomb_dif,)
for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) cols = mycols() if w == 'sGLB': tmp = ((dic[sl:,...].mean(axis=0))).mean(axis=(1,2)) tmp0 = (dic[0,...]).mean(axis=(1,2)) else: tmp = ((dic[sl:,...].mean(axis=0))ocim[w]).mean(axis=(1,2)) tmp0 = (dic[0,...]ocim[w]).mean(axis=(1,2)) tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d0 =
(dic[0:sf,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim[w]).sum()/1e312/1e15
dicinv[k].append(tmp2d-tmp2d0) ax[l].plot(tmp-tmp0,-1*v['lev'],color=cols[cnt],label=k)
ax[l].set_ylim(ylim[::-1])
cnt = cnt + 1
enxy = np.ma.stack(tupleA,axis=0) if wrt is not None: outf =
'/DFS-L/SCRATCH/moore/weiweif/IOMB_data/MODELS/meanCMIP'+str(cmip)+'/'+'cant_inv_meanCMIP.nc'
tonc_inv(outf,ocim['slat'][:,0],ocim['slon'][0,:],enxy.mean(axis=0)) print('get ocim dic') dicinv['obs_OCIM'] = []
ocim starts from 1780. 1980 corresponds to 200 1994: 214: 2007:227
if cmip == 6: dic = ocim['dicind'][214:228,...] #1994-2007 else:
dic = ocim['dicind'][214:226,...] #1994-2005
dic = ocim['dicind'][214:228,...] #1994-2007 sdep = ocim['sdep'][:,0,0] tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d =
((dic[-1,...]-dic[0,...])sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d0 = 0
tmp2d0 =
(dic[0:2:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]).sum()/1e3*12/1e15
print('OCIM total anthro carbon is ',tmp2d-tmp2d0) dicinv['obs_OCIM'].append(tmp2d-tmp2d0)
*tmp2e =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3
tmp2e0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3*
print(tmp2e.shape) if wrt is not None: fname = 'cant_inv_OCIM.nc' if os.path.isfile(fname) is False:
tonc_inv('cant_inv_OCIM.nc',ocim['slat'][:,0],ocim['slon'][0,:],tmp2e-tmp2e0)
for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) if w == 'sGLB': tmp = ((dic[sl:,...].mean(axis=0))).mean(axis=(1,2)) tmp0 = (dic[0,...]).mean(axis=(1,2)) else: tmp = ((dic[sl:,...].mean(axis=0))ocim[w]).mean(axis=(1,2)) tmp0 = (dic[0,...]ocim[w]).mean(axis=(1,2)) tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d0 =
(dic[0:sf,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d =
((dic[-1,...]-dic[0,...])sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d0 = 0
tmp2d0 =
(dic[0:2,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
dicinv['obs_OCIM'].append(tmp2d-tmp2d0)
ax[l].plot(tmp-tmp0,-1*ocim['slev'][:,0,0],label='OCIM',linewidth=2,color='k')
print('get gruber dic') dicinv['obs_Gruber']=[33.7,7.1,13.2,11.9] if wrt is not None: fname = 'cant_inv_Gruber.nc' if os.path.isfile(fname) is False: tonc_inv(fname,ocim['slat'][:,0],ocim['slon'][0,:],ogru['dicinv']) dic = ogru['dissic'] for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) if w == 'sGLB': tmp = dic.mean(axis=(1,2)) else: tmp = (dicocim[w]).mean(axis=(1,2)) ax[l].plot(tmp,-1ogru['lev'],label='Gruber et al 2019',linewidth=2,color='k',linestyle='--') for i in range(0,len(regs)): ax[i].set_ylim([-5000,0]) ax[i].set_xlim([-1,15]) ax[i].title.set_text(regs[i][1:]) ax[3].legend(loc=0) plt.show(block=False)
return fig,dicinv,enxy
On Wed, Jun 14, 2023 at 7:46 AM nocollier @.***> wrote:
It is still wrong,
[image: OCIM_nate] <
Can you please, as we discussed, send your conversion scripts or write out precisely what you did? I do not have time to keep guessing what you did and I want to get this finished.
— Reply to this email directly, view it on GitHub <
or unsubscribe <
. You are receiving this because you were mentioned.Message ID: @.***>
— Reply to this email directly, view it on GitHub <
https://github.com/rubisco-sfa/IOMB-Data/issues/4#issuecomment-1591592366>
or unsubscribe <
https://github.com/notifications/unsubscribe-auth/AAKFCB5KTMFDIFUIBY2HFMLXLHQDTANCNFSM6AAAAAAY4QTFLU>
. You are receiving this because you authored the thread.Message ID: @.***>
— Reply to this email directly, view it on GitHub < https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1591609936__;Iw!!CzAuKJ42GuquVTTmVmPViYEvSg!MypS6meNIsgP0FFS4vIRZEKpmes_sQsWx--pQhPsqoIBDXD-KwtlDf1dftavxeJ_yHA-jOlMMO3LH0rlZX5Gt9z9$>,
. You are receiving this because you were mentioned.Message ID: @.***>
— Reply to this email directly, view it on GitHub https://github.com/rubisco-sfa/IOMB-Data/issues/4#issuecomment-1591630196, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAKFCB5D3FKXXMB47ZZUOX3XLHSVBANCNFSM6AAAAAAY4QTFLU . You are receiving this because you authored the thread.Message ID: @.***>
Hi Nate
It is the original file. Both this file and the file I sent look ok from my end. In case you still see line breaks in this one, I copied it to github https://github.com/weiweifu/IOMB_dTdZ/blob/master/plotz230614
Best Weiwei
On Wed, Jun 14, 2023 at 10:26 AM nocollier @.***> wrote:
Yes, I see that. It has line breaks all over that I have to manually fix to look at your script. If you email me the file, then it is not broken. I should not have to fix your script when you can email the file without the line breaks. Thanks.
Nate
On Wed, Jun 14, 2023 at 12:41 PM Weiwei Fu @.***> wrote:
I copied the script to a file.
On Wed, Jun 14, 2023 at 9:30 AM nocollier @.***> wrote:
Many thanks, if you can email me that file instead it would be great. The paste messed up the formatting and I would rather not fix it.
Thanks, Nate
On Wed, Jun 14, 2023 at 12:20 PM Weiwei Fu @.***> wrote:
Hi Nate
I found my script written years ago (pasted below). It is a little messy. I highlighted 2 two lines to compute vertical integrated carbon (unit: mol/m2). We can jump on a zoom meeting if it is still wrong. I had several meetings yesterday, but today is ok.
Best Weiwei
def
plotz(ocim=None,ogru=None,dich=None,dicp=None,cmip=6,wrt=None,smth=None,r_0=None):
regs=['sGLB','sATL','sIND','sPAC','sSO'] if cmip == 6:
tL={'1994s':slice(14,28),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
else: #
tL={'1994s':slice(14,26),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
tL={'1994s':slice(14,26),'1980s':slice(0,10),'1990s':slice(10,20),'2000s':slice(20,30)}
cols = mycols() dicinv = {}
dich = collections.OrderedDict(sorted(dich.items())) plt.close('all')
fig, ax = plt.subplots(nrows=1,ncols=3,figsize=(8,3))
fig, ax = plt.subplots(nrows=1,ncols=len(regs),figsize=(13,3.5)) fig.tight_layout()
cnt = 0 sf = 1 sl = -1 tupleA = () for k,v in dich.items(): dicinv[k] = []
if 'cm' in k:
print('now model ',k) if v['info'][5] == 'gr':
dic = np.roll(v['dissic'],180,axis=-1)*1e3
dic =
(v[v['info'][0]][tL['1994s']]-dicp[k][dicp[k]['info'][0]][tL['1994s']])*1e3
to mmol/m3
else: dic =
(v[v['info'][0]][tL['1994s']]-dicp[k][dicp[k]['info'][0]][tL['1994s']])*1e3
to mmol/m3
sdep = v['lev_bnds'][:,1] - v['lev_bnds'][:,0]
find the index for 3000 m
i3000 = np.argmin(abs(v['lev']-3000)) print('level ',i3000,' at the depth of ',v['lev'][i3000]) d1 = slice(0,i3000+1) # cmip 0-3000m
tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]).sum()/1e3*12/1e15
tmp2d0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]).sum()/1e3*12/1e15
tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
print(k+' total anthro carbon is ',tmp2d-tmp2d0) dicinv[k].append(tmp2d-tmp2d0)
tmp2e =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3
tmp2e0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3
if smth is None: dif = tmp2e - tmp2e0 else: dif = smth9(tmp2e - tmp2e0,sigma_y=2,sigma_x=2) if wrt is not None: if r_0 is None: iomb_dif = dif else: print('Caution: negative values are replaced') iomb_dif = np.where(dif<0,0.0,dif) if cmip == 6: outf =
'/DFS-L/SCRATCH/moore/weiweif/IOMB_data/MODELS/'+k+'/'+'cantinv'+k+'.nc'
else: outf =
'/DFS-L/SCRATCH/moore/weiweif/IOMB_CMIP5/MODELS/'+k+'/'+'cantinv'+k+'.nc'
tonc_inv(outf,ocim['slat'][:,0],ocim['slon'][0,:],iomb_dif) else: iomb_dif = 0 tupleA = tupleA + (iomb_dif,)
for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) cols = mycols() if w == 'sGLB': tmp = ((dic[sl:,...].mean(axis=0))).mean(axis=(1,2)) tmp0 = (dic[0,...]).mean(axis=(1,2)) else: tmp = ((dic[sl:,...].mean(axis=0))ocim[w]).mean(axis=(1,2)) tmp0 = (dic[0,...]ocim[w]).mean(axis=(1,2)) tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d0 =
(dic[0:sf,...].mean(axis=0)sdep[:,None,None]v['area'][None,:,:]ocim[w]).sum()/1e312/1e15
dicinv[k].append(tmp2d-tmp2d0) ax[l].plot(tmp-tmp0,-1*v['lev'],color=cols[cnt],label=k)
ax[l].set_ylim(ylim[::-1])
cnt = cnt + 1
enxy = np.ma.stack(tupleA,axis=0) if wrt is not None: outf =
'/DFS-L/SCRATCH/moore/weiweif/IOMB_data/MODELS/meanCMIP'+str(cmip)+'/'+'cant_inv_meanCMIP.nc'
tonc_inv(outf,ocim['slat'][:,0],ocim['slon'][0,:],enxy.mean(axis=0)) print('get ocim dic') dicinv['obs_OCIM'] = []
ocim starts from 1780. 1980 corresponds to 200 1994: 214: 2007:227
if cmip == 6: dic = ocim['dicind'][214:228,...] #1994-2007 else:
dic = ocim['dicind'][214:226,...] #1994-2005
dic = ocim['dicind'][214:228,...] #1994-2007 sdep = ocim['sdep'][:,0,0] tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d =
((dic[-1,...]-dic[0,...])sdep[:,None,None]ocim['sarea'][None,:,:]ocim['sGLB']).sum()/1e312/1e15
tmp2d0 = 0
tmp2d0 =
(dic[0:2:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]).sum()/1e3*12/1e15
print('OCIM total anthro carbon is ',tmp2d-tmp2d0) dicinv['obs_OCIM'].append(tmp2d-tmp2d0)
*tmp2e =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3
tmp2e0 =
(dic[0:sf:,...].mean(axis=0)sdep[:,None,None]ocim['sGLB']).sum(axis=0)/1e3*
print(tmp2e.shape) if wrt is not None: fname = 'cant_inv_OCIM.nc' if os.path.isfile(fname) is False:
tonc_inv('cant_inv_OCIM.nc',ocim['slat'][:,0],ocim['slon'][0,:],tmp2e-tmp2e0)
for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) if w == 'sGLB': tmp = ((dic[sl:,...].mean(axis=0))).mean(axis=(1,2)) tmp0 = (dic[0,...]).mean(axis=(1,2)) else: tmp = ((dic[sl:,...].mean(axis=0))ocim[w]).mean(axis=(1,2)) tmp0 = (dic[0,...]ocim[w]).mean(axis=(1,2)) tmp2d =
(dic[sl:,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d0 =
(dic[0:sf,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d =
((dic[-1,...]-dic[0,...])sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
tmp2d0 = 0
tmp2d0 =
(dic[0:2,...].mean(axis=0)sdep[:,None,None]ocim['sarea'][None,:,:]ocim[w]).sum()/1e312/1e15
dicinv['obs_OCIM'].append(tmp2d-tmp2d0)
ax[l].plot(tmp-tmp0,-1*ocim['slev'][:,0,0],label='OCIM',linewidth=2,color='k')
print('get gruber dic') dicinv['obs_Gruber']=[33.7,7.1,13.2,11.9] if wrt is not None: fname = 'cant_inv_Gruber.nc' if os.path.isfile(fname) is False: tonc_inv(fname,ocim['slat'][:,0],ocim['slon'][0,:],ogru['dicinv']) dic = ogru['dissic'] for l,w in enumerate(regs): print('now in '+w+' index '+str(l)) if w == 'sGLB': tmp = dic.mean(axis=(1,2)) else: tmp = (dicocim[w]).mean(axis=(1,2)) ax[l].plot(tmp,-1ogru['lev'],label='Gruber et al 2019',linewidth=2,color='k',linestyle='--') for i in range(0,len(regs)): ax[i].set_ylim([-5000,0]) ax[i].set_xlim([-1,15]) ax[i].title.set_text(regs[i][1:]) ax[3].legend(loc=0) plt.show(block=False)
return fig,dicinv,enxy
On Wed, Jun 14, 2023 at 7:46 AM nocollier @.***> wrote:
It is still wrong,
[image: OCIM_nate] <
Can you please, as we discussed, send your conversion scripts or write out precisely what you did? I do not have time to keep guessing what you did and I want to get this finished.
— Reply to this email directly, view it on GitHub <
or unsubscribe <
. You are receiving this because you were mentioned.Message ID: @.***>
— Reply to this email directly, view it on GitHub <
https://github.com/rubisco-sfa/IOMB-Data/issues/4#issuecomment-1591592366> https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1591592366*3E__;IyU!!CzAuKJ42GuquVTTmVmPViYEvSg!N9TGtA_qnTxYni2CoxNCQjKXfRANJlAEEsdkN-woNB9UVbfUy_BxTXCSvlDdxJGRMSMFHrq4Ae67kKjU7fHnNkiD$
<
or unsubscribe <
https://github.com/notifications/unsubscribe-auth/AAKFCB5KTMFDIFUIBY2HFMLXLHQDTANCNFSM6AAAAAAY4QTFLU> https://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/AAKFCB5KTMFDIFUIBY2HFMLXLHQDTANCNFSM6AAAAAAY4QTFLU*3E__;JQ!!CzAuKJ42GuquVTTmVmPViYEvSg!N9TGtA_qnTxYni2CoxNCQjKXfRANJlAEEsdkN-woNB9UVbfUy_BxTXCSvlDdxJGRMSMFHrq4Ae67kKjU7cOmPQNv$
<
. You are receiving this because you authored the thread.Message ID: @.***>
— Reply to this email directly, view it on GitHub <
or unsubscribe <
. You are receiving this because you were mentioned.Message ID: @.***>
— Reply to this email directly, view it on GitHub < https://github.com/rubisco-sfa/IOMB-Data/issues/4#issuecomment-1591630196> https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1591630196*3E__;IyU!!CzAuKJ42GuquVTTmVmPViYEvSg!N9TGtA_qnTxYni2CoxNCQjKXfRANJlAEEsdkN-woNB9UVbfUy_BxTXCSvlDdxJGRMSMFHrq4Ae67kKjU7SUMVqH8$,
or unsubscribe < https://github.com/notifications/unsubscribe-auth/AAKFCB5D3FKXXMB47ZZUOX3XLHSVBANCNFSM6AAAAAAY4QTFLU> https://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/AAKFCB5D3FKXXMB47ZZUOX3XLHSVBANCNFSM6AAAAAAY4QTFLU*3E__;JQ!!CzAuKJ42GuquVTTmVmPViYEvSg!N9TGtA_qnTxYni2CoxNCQjKXfRANJlAEEsdkN-woNB9UVbfUy_BxTXCSvlDdxJGRMSMFHrq4Ae67kKjU7QjHoCw7$ . You are receiving this because you authored the thread.Message ID: @.***>
— Reply to this email directly, view it on GitHub https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1591703801__;Iw!!CzAuKJ42GuquVTTmVmPViYEvSg!N9TGtA_qnTxYni2CoxNCQjKXfRANJlAEEsdkN-woNB9UVbfUy_BxTXCSvlDdxJGRMSMFHrq4Ae67kKjU7ee18O92$, or unsubscribe https://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/AB27GWMMBT6UROSOQD7DX5DXLHX3NANCNFSM6AAAAAAY4QTFLU__;!!CzAuKJ42GuquVTTmVmPViYEvSg!N9TGtA_qnTxYni2CoxNCQjKXfRANJlAEEsdkN-woNB9UVbfUy_BxTXCSvlDdxJGRMSMFHrq4Ae67kKjU7TFwEtn3$ . You are receiving this because you were mentioned.Message ID: @.***>
Weiwei, I am unable to sort out the differences in what I produce and what you have in the IOMB_AR6 results.
integrate( dic(2007) - dic(1994), depth = [0,3000])
. The pre-industrial values aren't important here because they would get subtracted off.
Hi Nate
Thank you! For OCIM, the preindustrial value is not important because OCIM tracks only the anthropogenic part. From the figure showing PgC, I think the data are interpreted correctly. The figure shows the typical curve of anthropogenic carbon accumulation in the ocean. Yes, I compute the anthropogenic carbon of OCIM in the same time/space range(0-3000,1994-2007) as in the Gruber paper.
Best Weiwei
On Thu, Jun 15, 2023 at 11:10 AM nocollier @.***> wrote:
Weiwei, I am unable to sort out the differences in what I produce and what you have in the IOMB_AR6 results.
- For OCIM, I can reproduce figures 3b and 4 in the DeVries paper, see code https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/blob/main/OCIM/convert.py__;!!CzAuKJ42GuquVTTmVmPViYEvSg!J-Jg59fpWgVD-zWEUnUWKk0aQy8gjeuVBIAHUDkiiXDR5E2EctXvcfOGCi_LBJwx5T0WRavectmxarCdsmOsKlZR$ and the images below. Given that I can reproduce them, I am inclined to believe that I have correctly interpreted dimensions / units and I have correct data.
- I also finally understood that your OCIM comparison is meant to mimic what the Gruber data is, just a difference integrate( dic(2007)
- dic(1994), depth = [0,3000]). The pre-industrial values aren't important here because they would get subtracted off.
- You can also see a comparison https://urldefense.com/v3/__https://www.climatemodeling.org/*nate/ILAMB-Test/comparisons/dCant.png__;fg!!CzAuKJ42GuquVTTmVmPViYEvSg!J-Jg59fpWgVD-zWEUnUWKk0aQy8gjeuVBIAHUDkiiXDR5E2EctXvcfOGCi_LBJwx5T0WRavectmxarCdsrEiGa8s$ of my OCIM encoding to the Gruber product.
[image: DeVries3b] https://urldefense.com/v3/__https://user-images.githubusercontent.com/1331463/246199180-0a7b304a-9ea8-44ec-93a6-603291c78fd2.png__;!!CzAuKJ42GuquVTTmVmPViYEvSg!J-Jg59fpWgVD-zWEUnUWKk0aQy8gjeuVBIAHUDkiiXDR5E2EctXvcfOGCi_LBJwx5T0WRavectmxarCdsiB-I6zc$ [image: DeVries4] https://urldefense.com/v3/__https://user-images.githubusercontent.com/1331463/246199181-62a70fa1-c3ba-44ef-87a3-6ea8b7c38bab.png__;!!CzAuKJ42GuquVTTmVmPViYEvSg!J-Jg59fpWgVD-zWEUnUWKk0aQy8gjeuVBIAHUDkiiXDR5E2EctXvcfOGCi_LBJwx5T0WRavectmxarCdsjIp9u7Q$
— Reply to this email directly, view it on GitHub https://urldefense.com/v3/__https://github.com/rubisco-sfa/IOMB-Data/issues/4*issuecomment-1593520829__;Iw!!CzAuKJ42GuquVTTmVmPViYEvSg!J-Jg59fpWgVD-zWEUnUWKk0aQy8gjeuVBIAHUDkiiXDR5E2EctXvcfOGCi_LBJwx5T0WRavectmxarCdsq9puPCp$, or unsubscribe https://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/AB27GWPKLNA3XCLYN37U3UTXLNF23ANCNFSM6AAAAAAY4QTFLU__;!!CzAuKJ42GuquVTTmVmPViYEvSg!J-Jg59fpWgVD-zWEUnUWKk0aQy8gjeuVBIAHUDkiiXDR5E2EctXvcfOGCi_LBJwx5T0WRavectmxarCdspF6HmYE$ . You are receiving this because you were mentioned.Message ID: @.***>
@weiweifu