the Creative Commons Attribution 4.0 License.
the Creative Commons Attribution 4.0 License.
TRACE-Python: Tracer-based Rapid Anthropogenic Carbon Estimation Implemented in Python (version 1.0)
Abstract. An implementation of Tracer-based Rapid Anthropogenic Carbon Estimation (TRACE), an algorithm for estimating anthropogenic carbon in the ocean, was produced using the Python coding language. TRACE is a transit time distribution approach intended to increase the accessibility of reliable and accurate anthropogenic carbon estimates. This algorithm produces estimates of ocean anthropogenic carbon as a function of user-supplied coordinates, year, depth, seawater salinity, atmospheric carbon dioxide pathway, and optionally seawater temperature. We demonstrate the identical results of this implementation relative to its MATLAB predecessor, explore the sensitivity of anthropogenic carbon estimates to a newly-expanded range of available user input parameters, and suggest further lines of development for this software product as well as transient tracer-based ocean state estimation in general. Additionally, a new column integration routine was developed and deployed on anthropogenic carbon estimates generated from TRACE-Python when applied to the GLODAPv2.2016b gridded product temperature and salinity, yielding updated global and regional anthropogenic carbon inventories for the industrial era through the year 2500 along a range of atmospheric carbon dioxide trajectories. These inventories demonstrate satisfactory agreement with previous observation-based anthropogenic carbon inventories within the uncertainty of the estimate, demonstrating the skill of the TRACE method at the global level. This implementation of TRACE represents a step forward in accessibility to a wider user base, flexibility in user-specification of a greater number of estimation parameters, and skill as measured against other anthropogenic carbon estimates.
- Preprint
(5406 KB) - Metadata XML
- BibTeX
- EndNote
Status: open (until 06 May 2026)
- RC1: 'Comment on egusphere-2025-5793', Anonymous Referee #1, 20 Mar 2026 reply
-
RC2: 'Comment on egusphere-2025-5793', Wenrui Jiang, 24 Apr 2026
reply
This paper introduced a very interesting tool for estimating the concentration, mean age, and other preformed quantities under a neural network+IG-TTD framework. It is able to reproduce well the previous MATLAB version of the same method and added new functionality that provides more user flexibility. It also compares reasonably well with previous literature. Although there is not doubt in my mind that this constitutes a significant contribution to the field, the overall narrative and presentation need improvements. Although there is no new analysis needed, a major revision on the text is recommended.
Main comments
-
Although the precursor paper Carter et al 2025 is available, this paper should be able to convey all the necessary information as a stand-alone paper. I personally find it very difficult to understand what the package does without referring to Carter et al 2025. A section like Section 2.2 of Carter et al 2025 would help a lot. As a reader and potential user, one would like to know what are the input and output of the tool and how it works broadly.
-
As an alternative and maybe better solution to the above problem is to have a diagram or some kind of pseudo code. In a diagram, you can show what the format of the input and output are and you can also highlight the new functionalities with a different color.
-
It surprised me somewhat that the vertical interpolation and integration scheme have such a big impact on the overall results. Although I understand the choice of using a spline style interpolation to account for the stiffness of gradient and the existence of outliers, the choice still feels subjective. If you like, I suggest add an example of a vertical profile with different interpolation to justify this choice.
-
Somewhat related to the previous comment. The salinity in finite-volume models are grid-cell averaged quantity. The lat-lon location of a grid cell centers can also be considered the grid cell averaged location. Instead of using neural network to predict the concentration at a point, one presumably can first calculate the averaged concentration of tracers in a volume using observations and feed that to the neural network. In this way, there will not be any ambiguity in terms of what integration approach to use.
-
Do you have any estimate of the effect of seasonality and/or hemispheric asymmetry of CO2? If not, a brief discussion would still be nice.
-
There are many important issues that I think should be mentioned early on, but only got mention in the discussion, in another paper, or simply was never mentioned. These include: (1) Is xCO2 spatially varying? (2) Can the ratio of Gamma and Delta vary in space/time? (3) How does preformed quantities affect C_anth? (4) Is there some kind of DIC dynamics in the model, i.e. increased CO2 decrease alkalinity and prevent future uptake of CO2? (5) For a future projection simulation, should I use the PI temperature and salinity as input or should I use the projected temperature and salinity? (6) Does the Green function change with time (does it assume constant diffusivity and velocity field?) (7) When I opt to provide temperature, am I using a different neural network to when I opt out?
Minor comments:
-
L4: “user supplied coordinates, year, depth…” There is two issues: coordinates often include depth. Also, why not just say time instead of year? It sounds like year need to be an integer.
-
L25-27 This sentence is quite hard to read. I also find this paragraph does not help the narrative much.
-
Equation 1:Here, I suggest talking about the functional dependency of all the parameters. Is Gamma and Delta function of space? Are you defining t=0 implicitly to be the time of tracer initiation? Should G(t) be G(\vec x ,t; \vec x’, t;’)? If you can answer some of those questions here it can really help with many of my earlier confusions. Perhaps start with the most general case first and then clearly state how you simplified it.
-
Equation 1: I believe for most readers, it is not always obvious how to get C_anth using G. Please write out the convolution explicitly.
-
Equation 1: Also, may as well just spell out the integral to define Delta and Gamma.
-
L70-71 What is the input output format of the neural network? Without mentioning how it is trained, it is also difficult to know how it works. A diagram would help here.
-
L82 and Equation 2: It is weird to call it a recursive function if pCO2^{oce} does not appear on the RHS. It just has some memory.
-
Equation 2: the 65 in t-65 does not have a unit.
-
L87: Eq2 seems to me like a simple weighted average. To say that it accounts for both the value and the increase and decrease seems like a weird way to say that and it is slightly confusing.
-
L101-111: This paragraph introduce too many new concepts, and many for me are very foreign. I had to find the paper for (Py)CO2SYS to understand what you mean by equilibrium parameters. Either stay at a higher level and not get in the weeds or elaborate on what each new word means.
-
L112-119: This seems like an awfully long way of saying we should also try 0.2-1.8 apart from 1.3. May be condense the citations to fewer sentences. I also got the wrong impression that the ratio can be spatially varying here.
-
L126: Cite a few example of the "literature" here
-
L124-128: I was under the impression that it is due to the nonlinearity of DIC chemistry that preindustrial CO2 concentration affect C_anth, but I later realize you are actually talking about definition of base lines, is that right? If so, it would be nice to clarify the source of ambiguity caused by the PI baseline.
-
L142: Aren’t all functions provided in the GitHub repo?
-
L149: This is probably a layman question, can you say a bit more about what “tolerance for pH change” mean? Is the 1e-3 1e-4 in the log pH unit? If so, can we measure such small changes in pH in observation? I think a descent pH meter can only measure as accurate as \pm 0.01.
-
L154-155: This seems like a rather small performance increase. Unless there is some reason to drastically scale up this calculation or repeat the calculation many times, I think most users don’t mind wait 10 more seconds for the result. I suggest simply stating that the performance is comparable.
-
Table 1: Can you add the uncertainty to each results. I understand this table is trying to demonstrate the consistency (which is pretty impressive btw). It still looks like you have 9 significant digits.
-
Figure 2:I suggest moving the small 10^{-5} to the y axis label to make it more visible. Same for the other figures in the appendix. Also, just out of curiosity, where are the points that have larger deviation?
-
L197-198: This comparison is very nice indeed. I suggest also list the result of the original interpolation here. I am sorry for my paranoia, but when I am reading this I thought you may have developed several vertical interpolation/integration schemes and picked the one with the best agreement. I am not accusing you of doing that, of course, but I think other reader may also have the same gut reaction. If you could make a stronger case for the Hermite splines, or say something like "the interpolation scheme we chose happens to improve the agreement", it will help with this issue.
-
L248: Do diapycnal diffusion and/or deep convections play no role in the age distribution? Please clarify.
-
L277: what is ESPER? Please provide a citation or at least provide the full name.
-
Figure 6: provide a map of WOCE A16 or at least say which basin it is in. The panels look a bit too similar to me. Perhaps plot their difference instead?
-
L291-300: Much of this should be mentioned earlier to reduce some confusions.
-
L318: Does the model only work with GLODAP? Can a user use a different model/reanalysis?
-
Appendix D: I am not sure what the purpose of this appendix is. Why is the 2020 CO2 only 300 ppm?
Citation: https://doi.org/10.5194/egusphere-2025-5793-RC2 -
-
RC3: 'Comment on egusphere-2025-5793', Anonymous Referee #3, 26 Apr 2026
reply
General comment
This work describes TRACE-Python, a Python implementation of the TRACE algorithm for estimating anthropogenic carbon in the ocean. It briefly introduces the underlying algorithm, evaluates TRACE-Python against its MATLAB predecessor and introduces its new functionalities. The authors have done a solid job in porting TRACE to Python, making it more accessible to the community. The new functionalities help to explore various uncertainties in the TRACE-based anthropogenic carbon estimate. Overall, I think this is a useful contribution to the community.
Nonetheless, I have a few specific comments below for the authors to consider.
Specific comment
I find it difficult to get an overall picture of how the TRACE method works from Section 2. There are many components in the TRACE method. But, it is difficult to see how they work together to convert various inputs to the final output. In particular, there is no equation showing how the pCO2 boundary condition in Eq. 2 is combined with the IG-TTD kernel in Eq. 1 to produce the point estimate of C_anth in Fig. 3. I suggest that the authors include a flowchart to clearly show how the various inputs go through different neural networks and PyCO2SYS to produce the IG-TTD kernel and the boundary condition, and then the C_anth estimate. Such a diagram would help readers quickly understand the basics of the TRACE method without having to consult multiple references individually.
TRACE-Python allows users to change the shape parameter (Δ/Γ) of the IG-TTD distribution from the default value of 1.3 to other values. Lines 70-72 suggest that the default IG-TTD distribution is constrained by observations of CFC-11, CFC-12 and SF6. But it is not clear whether the IG-TTD distributions with altered shape parameters are constrained by observations as well? If not, this suggests that the C_anth estimates with altered shape parameter (e.g. those in Figs. 5 and 6) are not observationally constrained, hence less reliable than the default one.
The analysis of Fig. 6 suggests that altering Δ/Γ also leads to a change in the mean age Γ. I am not sure how this works. In theory, one could change Δ/Γ by only changing Δ, without changing Γ. Is this done by the neural network that produces IG-TTD from input parameters? In addition, I find the description in lines 121-123 regarding the neural network difficult to understand. It may be useful to briefly explain how the neural network was trained in the first place.
Lines 212-217 It would be useful to compare the projections from TRACE-Python with those from CMIP Earth system models here.
Line 252 "This contrasts with the findings of He et al. (2018) ..." Why is your finding different from He et al.? Please add a discussion to address this discrepancy.
Citation: https://doi.org/10.5194/egusphere-2025-5793-RC3
Viewed
| HTML | XML | Total | BibTeX | EndNote | |
|---|---|---|---|---|---|
| 199 | 112 | 30 | 341 | 76 | 80 |
- HTML: 199
- PDF: 112
- XML: 30
- Total: 341
- BibTeX: 76
- EndNote: 80
Viewed (geographical distribution)
| Country | # | Views | % |
|---|
| Total: | 0 |
| HTML: | 0 |
| PDF: | 0 |
| XML: | 0 |
- 1
Review of the manuscript EGUsphere-2025-5793, ‘TRACE-Python: Tracer-based Rapid Anthropogenic Carbon Estimations Implemented in Python (version 1.0)’, by Sandborn et al.
General comments
The study describes an update to the “TRACE” routine and its implementation in Python, from previous MATLAB formulation. TRACE is an approach to estimate oceanic anthropogenic carbon, based on transit time distribution. The algorithm estimates anthropogenic carbon based on user-provided geographical coordinates, year, depth, seawater salinity, atmospheric CO2 pathways, and (opt.) seawater temperature. The results show an impressive agreement with previous estimates.
The manuscript is well written, and interesting and this update should be very useful for a larger community. I only have very few minor comments, and after those are handled, I recommend publication.
Specific comments
L54: This is a minor comment but since you defined “TRACE” just above you may consider using the short version here.
L213: Do you mean “uptake” here? (instead of “update”)
L258: Is this not the opposite of what is stated in the caption of Figure 6? Here it says, “Lower values of D/G were associated with higher vertical gradients …” and in the Fig. 6 caption it says, “Higher values of D/G are associated with a higher surface-to-depth mean age gradient …”.
Technical comments
L114: Add a comma after “1.3”.
L192: … in Carter et al. (2025) …
L195: (Table C1), which …