<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing with OASIS Tables v3.0 20080202//EN" "https://jats.nlm.nih.gov/nlm-dtd/publishing/3.0/journalpub-oasis3.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table" xml:lang="en" dtd-version="3.0" article-type="methods-article">
  <front>
    <journal-meta><journal-id journal-id-type="publisher">OS</journal-id><journal-title-group>
    <journal-title>Ocean Science</journal-title>
    <abbrev-journal-title abbrev-type="publisher">OS</abbrev-journal-title><abbrev-journal-title abbrev-type="nlm-ta">Ocean Sci.</abbrev-journal-title>
  </journal-title-group><issn pub-type="epub">1812-0792</issn><publisher>
    <publisher-name>Copernicus Publications</publisher-name>
    <publisher-loc>Göttingen, Germany</publisher-loc>
  </publisher></journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.5194/os-22-3403-2026</article-id><title-group><article-title>Furthest-first inversion for internal consistency adjustments in the biogeochemical data product GLODAPv3</article-title><alt-title>Furthest-first inversion for GLODAPv3</alt-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author" corresp="yes" rid="aff1">
          <name><surname>Humphreys</surname><given-names>Matthew P.</given-names></name>
          <email>matthew.humphreys@nioz.nl</email>
        <ext-link>https://orcid.org/0000-0002-9371-7128</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff2">
          <name><surname>Lauvset</surname><given-names>Siv K.</given-names></name>
          
        <ext-link>https://orcid.org/0000-0001-8498-4067</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff2">
          <name><surname>Lange</surname><given-names>Nico</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff3">
          <name><surname>Bittig</surname><given-names>Henry C.</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff4 aff5">
          <name><surname>Carter</surname><given-names>Brendan R.</given-names></name>
          
        <ext-link>https://orcid.org/0000-0003-2445-0711</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff6">
          <name><surname>Hoppema</surname><given-names>Mario</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-2326-619X</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff7">
          <name><surname>Murata</surname><given-names>Akihiko</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-5931-2784</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff8">
          <name><surname>Olsen</surname><given-names>Are</given-names></name>
          
        <ext-link>https://orcid.org/0000-0003-1696-9142</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff9">
          <name><surname>Tanhua</surname><given-names>Toste</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-0313-2557</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff10">
          <name><surname>Ulfsbo</surname><given-names>Adam</given-names></name>
          
        <ext-link>https://orcid.org/0000-0001-7550-7381</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff11">
          <name><surname>Velo</surname><given-names>Antón</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-7598-5700</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff12">
          <name><surname>Woosley</surname><given-names>Ryan J.</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-2008-7751</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff13">
          <name><surname>Azetsu-Scott</surname><given-names>Kumiko</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-1466-6386</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff14 aff15 aff16">
          <name><surname>Müller</surname><given-names>Jens D.</given-names></name>
          
        <ext-link>https://orcid.org/0000-0003-3137-0883</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff11">
          <name><surname>Pérez</surname><given-names>Fiz F.</given-names></name>
          
        <ext-link>https://orcid.org/0000-0003-4836-8974</ext-link></contrib>
        <aff id="aff1"><label>1</label><institution>Department of Ocean Systems, NIOZ Royal Netherlands Institute for Sea Research, Texel, the Netherlands</institution>
        </aff>
        <aff id="aff2"><label>2</label><institution>NORCE Research AS, Bjerknes Centre for Climate Research, Bergen, Norway</institution>
        </aff>
        <aff id="aff3"><label>3</label><institution>Leibniz Institute for Baltic Sea Research Warnemünde (IOW), Rostock-Warnemünde, Germany</institution>
        </aff>
        <aff id="aff4"><label>4</label><institution>Cooperative Institute for Climate, Ocean, and Ecosystem Studies, University of Washington, Seattle, WA, USA</institution>
        </aff>
        <aff id="aff5"><label>5</label><institution>Pacific Marine Environmental Laboratory, National Oceanic and Atmospheric Administration, Seattle, WA, USA</institution>
        </aff>
        <aff id="aff6"><label>6</label><institution>Alfred Wegener Institute Helmholtz Centre for Polar and Marine Research, Bremerhaven, Germany</institution>
        </aff>
        <aff id="aff7"><label>7</label><institution>Research Institute for Global Change, Japan Agency for Marine–Earth Science and Technology, Yokosuka, Japan</institution>
        </aff>
        <aff id="aff8"><label>8</label><institution>Geophysical Institute, University of Bergen and Bjerknes Centre for Climate Research, Bergen, Norway</institution>
        </aff>
        <aff id="aff9"><label>9</label><institution>GEOMAR Helmholtz Centre for Ocean Research Kiel, Kiel, Germany</institution>
        </aff>
        <aff id="aff10"><label>10</label><institution>Department of Marine Sciences, University of Gothenburg, Gothenburg, Sweden</institution>
        </aff>
        <aff id="aff11"><label>11</label><institution>Instituto de Investigaciónes Mariñas, IIM – CSIC, Vigo, Spain</institution>
        </aff>
        <aff id="aff12"><label>12</label><institution>Center for Sustainability Science &amp; Strategy, Earth, Atmospheric &amp; Planetary Sciences,  Massachusetts Institute of Technology, Cambridge, MA, USA</institution>
        </aff>
        <aff id="aff13"><label>13</label><institution>Department of Fisheries and Oceans, Bedford Institute of Oceanography, Dartmouth, NS, Canada</institution>
        </aff>
        <aff id="aff14"><label>14</label><institution>Carbon to Sea Initiative, Washington, DC, USA</institution>
        </aff>
        <aff id="aff15"><label>15</label><institution>Climate and Environmental Physics, Physics Institute, University of Bern, Bern, Switzerland</institution>
        </aff>
        <aff id="aff16"><label>16</label><institution>Oeschger Centre for Climate Change Research, University of Bern, Bern, Switzerland</institution>
        </aff>
      </contrib-group>
      <author-notes><corresp id="corr1">Matthew P. Humphreys (matthew.humphreys@nioz.nl)</corresp></author-notes><pub-date><day>23</day><month>October</month><year>2026</year></pub-date>
      
      <volume>22</volume>
      <issue>5</issue>
      <fpage>3403</fpage><lpage>3414</lpage>
      <history>
        <date date-type="received"><day>28</day><month>May</month><year>2026</year></date>
           <date date-type="rev-request"><day>4</day><month>June</month><year>2026</year></date>
           <date date-type="rev-recd"><day>6</day><month>October</month><year>2026</year></date>
           <date date-type="accepted"><day>7</day><month>October</month><year>2026</year></date>
      </history>
      <permissions>
        <copyright-statement>Copyright: © 2026 Matthew P. Humphreys et al.</copyright-statement>
        <copyright-year>2026</copyright-year>
      <license license-type="open-access"><license-p>This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this licence, visit <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link></license-p></license></permissions><self-uri xlink:href="https://os.copernicus.org/articles/22/3403/2026/os-22-3403-2026.html">This article is available from https://os.copernicus.org/articles/22/3403/2026/os-22-3403-2026.html</self-uri><self-uri xlink:href="https://os.copernicus.org/articles/22/3403/2026/os-22-3403-2026.pdf">The full text article is available as a PDF file from https://os.copernicus.org/articles/22/3403/2026/os-22-3403-2026.pdf</self-uri>
      <abstract><title>Abstract</title>

      <p id="d2e316">The global ocean absorbs a significant portion of anthropogenic carbon dioxide (<inline-formula><mml:math id="M1" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) emissions. Tracking the fate of absorbed <inline-formula><mml:math id="M2" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and its impacts requires an internally consistent global observational dataset spanning decades. In the Global Ocean Data Analysis Project (GLODAP), data from disparate research cruises are compared in a secondary quality-control process, adjusted for consistency where necessary and compiled into a data product. Differences between cruises are quantified with a crossover analysis, comparing data at depth (where natural variability is minimal) from nearby sampling stations, and an inversion algorithm calculates a set of adjustments that would minimise these differences globally. The adjustments are reviewed by an expert committee and a subset applied to produce the final data product. The previous major version (GLODAPv2) used a weighted least squares (WLSQ) approach for the inversion. However, several issues became apparent when applied to the GLODAPv3 dataset, primarily significant regional biases in calculated adjustments. To address these issues, a new inversion algorithm called furthest-first (FF) has been developed for use in GLODAPv3, which has been implemented in a freely available, open-source Python package (xover). Here, we describe the FF approach and test it on simulated datasets and by comparing it to WLSQ, finding that it produces accurate adjustments. We also show how the FF approach can be adapted (i) to avoid the regional biases that appear in WLSQ, (ii) to find an optimal set of adjustments accounting for the fact that some cruises will ultimately not be adjusted, and (iii) to approximately preserve selected trends in the cruise-by-cruise differences. Points (i) and (ii) above are addressed by a two-step variant of the approach denoted FF<sub>2</sub>, which was applied in GLODAPv3.  While FF represents a marked improvement on WLSQ for the GLODAP application, no algorithm can completely replace the role of expert judgement in the inversion process, for example when selecting convergence criteria, which cruises are permitted to be adjusted, and which trends should be preserved.</p>
  </abstract>
    
<funding-group>
<award-group id="gs1">
<funding-source>European Commission</funding-source>
<award-id>101083922</award-id>
</award-group>
</funding-group>
</article-meta>
  </front>
<body>
      

<sec id="Ch1.S1" sec-type="intro">
  <label>1</label><title>Introduction</title>
      <p id="d2e359">The ocean has taken up almost 30 % of accumulated anthropogenic carbon dioxide (<inline-formula><mml:math id="M4" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) emissions since 1850 <xref ref-type="bibr" rid="bib1.bibx2" id="paren.1"/>, and approximately 90 % of the excess heat <xref ref-type="bibr" rid="bib1.bibx13" id="paren.2"/>. The consequences include ocean warming, acidification, and deoxygenation <xref ref-type="bibr" rid="bib1.bibx4" id="paren.3"/>. To quantify both the size of the changing ocean carbon sink and the consequences, internally consistent observations of marine carbonate system and other biogeochemical variables are needed. However, global ocean carbon and biogeochemistry data are produced by many laboratories using varied and evolving methods and equipment, meaning that systematic biases may exist, especially between older and newer datasets. This, exacerbated by the general sparsity of ocean observations, complicates the quantification and understanding of observed changes. As a response, the Global Ocean Data Analysis Project (GLODAP) was initiated in the late 1990s as an effort to synthesize a global bias-corrected dataset primarily for quantifying anthropogenic inorganic carbon in the ocean <xref ref-type="bibr" rid="bib1.bibx9" id="paren.4"/>. The goal of GLODAP is to create an internally consistent data product of carbon-relevant data for the world ocean, where all datasets are comparable through time and space such that long-term trends can be reliably determined. The emphasis is on internal consistency rather than absolute accuracy, because there is no established way to objectively determine the latter.  That said, GLODAP aims not to change the regional or global averages of the variables it adjusts.</p>
      <p id="d2e385">For the previous major version of GLODAP <xref ref-type="bibr" rid="bib1.bibx14" id="paren.5"><named-content content-type="pre">GLODAPv2;</named-content></xref> the “crossover and inversion” method was used for quality control (QC), as described by <xref ref-type="bibr" rid="bib1.bibx17" id="text.6"/>, <xref ref-type="bibr" rid="bib1.bibx3" id="text.7"/> and <xref ref-type="bibr" rid="bib1.bibx8" id="text.8"/>. The crossover step compares deep (e.g., <inline-formula><mml:math id="M5" display="inline"><mml:mrow><mml:mo>&gt;</mml:mo><mml:mn mathvariant="normal">1500</mml:mn></mml:mrow></mml:math></inline-formula> m) data from pairs of cruises that measured the same variable(s) within a defined distance of each other, and quantifies the differences (“offsets”) between them. In the inversion step, an adjustment is calculated for each cruise that would minimise its crossover differences. For both GLODAPv1.1 <xref ref-type="bibr" rid="bib1.bibx9" id="paren.9"/> and GLODAPv2 <xref ref-type="bibr" rid="bib1.bibx14" id="paren.10"/> the inversion was solved using a weighted least squares model (WLSQ) following <xref ref-type="bibr" rid="bib1.bibx8" id="text.11"/>, which was applied separately to different ocean regions. During the preparation of GLODAP version 3 (hereafter GLODAPv3), a global rather than regional inversion was attempted, which revealed several problems with the WLSQ approach.</p>
      <p id="d2e422">The main symptom was strong spatial patterns in the calculated adjustments for certain variables. Damping the WLSQ model using a set of pre-defined core cruises (the weighted damped least squares, WDLSQ, solution) reduced the patterns but did not remove them entirely. The spatial patterns are not evident in the pre-inversion differences between cruises, have no apparent physical reason, and are not associated with different countries, laboratories or research groups. A network analysis revealed that the most likely cause is that while GLODAP cruises are well-connected by crossovers within the major ocean basins, they are relatively poorly connected by crossovers between cruises in different basins. This means that the apparent differences between basins probably reflect random uncertainties in cruise pair offsets in the connecting cruises, which do not average out to zero because of the scarcity of connections, rather than true regional biases that should be removed with adjustments.</p>
      <p id="d2e425">It was challenging to understand the causes of this problem and rationalise the WLSQ adjustments because, from the user perspective, the method provides a solution in one step. Further, in versions prior to GLODAPv3, not all calculated adjustments were actually implemented. Instead there was an expert discussion and decision on each adjustment, and adjustments that were smaller than the minimum limits were ignored. As WLSQ actively eliminates apparent trends in pre-adjusted data, some calculated adjustments had to be ignored or manually modified in an attempt to preserve these trends. These decisions were all made to achieve the GLODAP goal of improved global consistency with as few adjustments as possible. However, making such expert decisions means that the results of the inversion may also no longer be appropriate, as each calculated adjustment is valid only in the context of the whole set of adjustments. If a particular adjustment is not made, then the whole set should be recalculated taking this into account. This means that while WLSQ is an appropriate solution to the problem, the way GLODAP has used this method in the past can be improved.</p>
      <p id="d2e429">There are some additional technical issues with WLSQ. Because they optimise everything at once, least-squares models are sensitive to outliers. This means that one cruise with a big offset will skew the adjustment calculated for all cruises connected to it. In previous GLODAP versions, this problem was limited by applying pre-inversion adjustments to the strongest outliers and using weights to limit the influence of uncertain offsets, but these modifications do not remove the problem entirely. Additionally, the matrix used to specify crossover differences was highly overdetermined, and least squares models are generally acknowledged to be a poor choice for solving such matrices. The GLODAP matrices are also unevenly distributed, i.e., showing strong grouping, with many rows (crossovers) for a limited set of columns (cruises). Least squares methods are known to be sensitive to groupings such that the solution can easily be biased towards groups. Finally, the WLSQ model minimises the individual crossover differences, not the average difference for each cruise. This means that individual cruises are likely to end up with non-zero average offsets after adjustment.</p>
      <p id="d2e432">Here, we present a new inversion approach, designed to circumvent the problems above, called furthest first (FF). FF is a type of coordinate-descent optimisation <xref ref-type="bibr" rid="bib1.bibx20" id="paren.12"/>, where cruises are adjusted separately and iteratively starting with those with the greatest offsets. It includes the capacity to not adjust a selected subset of cruises, while still accounting for their offsets, and to preserve selected temporal trends in the offsets. We describe the FF method, which has been implemented in an open-source Python package <xref ref-type="bibr" rid="bib1.bibx6" id="paren.13"><named-content content-type="pre">xover;</named-content></xref>. Simulated crossover networks have been used to validate the FF calculations, and the results for real GLODAPv3 datasets have been compared with WLSQ calculations, including quantitative and qualitative overviews of the differences between the methods. FF has been used for the inversion analysis for GLODAPv3, and the companion data description paper contains more details for that specific application <xref ref-type="bibr" rid="bib1.bibx11" id="paren.14"/>.</p>
</sec>
<sec id="Ch1.S2">
  <label>2</label><title>Methods</title>
<sec id="Ch1.S2.SS1">
  <label>2.1</label><title>Crossover analysis</title>
      <p id="d2e461">The crossover analysis is an objective way to detect systematic differences between two cruises with measurement profiles in close spatial proximity <xref ref-type="bibr" rid="bib1.bibx3" id="paren.15"/>. To minimise the effect of natural (e.g., seasonal) variability on differences between cruises, data are compared only in the deep part of the water column <xref ref-type="bibr" rid="bib1.bibx14" id="paren.16"><named-content content-type="pre">typically <inline-formula><mml:math id="M6" display="inline"><mml:mo>&gt;</mml:mo></mml:math></inline-formula> 1500 m, though this has varied;</named-content></xref> where such variability is small, and between stations within a lateral distance threshold, which has varied from 100 to 300 km in different versions of GLODAP, but this variation has not significantly affected the results of the crossover analysis.</p>
      <p id="d2e479">In general terms, a “cruise” is a subset of data that was measured and calibrated together such that any systematic bias in the values should be consistent and can be eliminated using a constant correction across the whole subset. Usually this corresponds to an individual oceanographic expedition identified by a common expedition code (expocode). However, in some circumstances an alternative approach might be needed, for example to account for differences between legs of an expedition or offsets between different instruments used to measure the same variable.</p>
      <p id="d2e482">GLODAP uses the “running cluster” variation of crossover analysis <xref ref-type="bibr" rid="bib1.bibx17" id="paren.17"/>, in which each individual profile from cruise <inline-formula><mml:math id="M7" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> is compared to all profiles from cruise <inline-formula><mml:math id="M8" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula> that fall within the distance threshold by interpolating to a series of depth, potential temperature or density levels. This is repeated for all profiles in cruise <inline-formula><mml:math id="M9" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula>, and then a weighted mean offset and weighted standard deviation are calculated across the levels. The weighting is such that levels with less scatter have a larger influence on the mean. If cruise <inline-formula><mml:math id="M10" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> has at least three profiles that overlap with cruise <inline-formula><mml:math id="M11" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula>, then a final crossover difference (<inline-formula><mml:math id="M12" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>) is calculated, and these differences are compiled into a crossover matrix. The crossover difference for <inline-formula><mml:math id="M13" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is assumed to be equal to <inline-formula><mml:math id="M14" display="inline"><mml:mrow><mml:mo>-</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, rather than being evaluated separately.</p>
      <p id="d2e574">For some variables, it may be more appropriate to calculate crossover differences as multiplicative rather than additive differences <xref ref-type="bibr" rid="bib1.bibx12" id="paren.18"/>.  These must be converted into percentage differences (e.g., 1 % rather than 1.01) when inserting into the crossover matrix, because the algorithm attempts to minimise all values in this matrix.</p>
      <p id="d2e581">A weight can be assigned to each crossover to modulate its influence on the calculated adjustments. How these weights should be assigned may vary by the application. For GLODAPv3, the calculated weights are mainly based on the inverse of the standard deviation of the offsets calculated from each profile in cruise <inline-formula><mml:math id="M15" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> that overlaps with cruise <inline-formula><mml:math id="M16" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula>. The weights are then further scaled by a series of factors that influence our confidence in each crossover, representing the differences in time between cruises, lateral temperature and density gradients, depth and number of crossover data points, and statistical quality. For a detailed explanation, see the GLODAPv3 data description paper <xref ref-type="bibr" rid="bib1.bibx11" id="paren.19"/>.</p>
</sec>
<sec id="Ch1.S2.SS2">
  <label>2.2</label><title>Furthest-first inversion</title>
<sec id="Ch1.S2.SS2.SSS1">
  <label>2.2.1</label><title>Overview of the furthest-first approach</title>
      <p id="d2e616">Furthest-first (FF) inversion is a form of coordinate-descent optimisation.  Briefly, the FF inversion procedure works as follows. Cruise weighted mean offsets (<inline-formula><mml:math id="M17" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> for cruise <inline-formula><mml:math id="M18" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula>, where <inline-formula><mml:math id="M19" display="inline"><mml:mi>s</mml:mi></mml:math></inline-formula> refers to the iteration step; Appendix <xref ref-type="sec" rid="App1.Ch1.S1"/>) are calculated for all cruises, and the cruise with the largest <inline-formula><mml:math id="M20" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> normalised to its uncertainty is adjusted to exactly eliminate its offset. In other words, the cruise that lies <italic>furthest</italic> from its neighbours is adjusted <italic>first</italic>. All <inline-formula><mml:math id="M21" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> values are then recalculated accounting for the adjustment, and these steps are repeated until some convergence criterion is reached.  During the procedure, some cruises may be adjusted multiple times, with each successive adjustment refining the overall adjustment value after adjacent cruises have also been adjusted, while others may never receive any adjustments.  Some cruises can be fixed to receive pre-defined (e.g., zero) adjustments, and temporal trends in variables can be selectively and approximately preserved. The following sections describe the procedure in more detail.</p>
</sec>
<sec id="Ch1.S2.SS2.SSS2">
  <label>2.2.2</label><title>Initial setup</title>
      <p id="d2e698">For each variable that will receive adjustments, an <inline-formula><mml:math id="M22" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mo>×</mml:mo><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mi>n</mml:mi></mml:mrow></mml:math></inline-formula> crossover matrix <inline-formula><mml:math id="M23" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> of offsets between pairs of cruises (Sect. <xref ref-type="sec" rid="Ch1.S2.SS1"/>) is assembled, where <inline-formula><mml:math id="M24" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula> is the total number of cruises in the dataset.  Each element of <inline-formula><mml:math id="M25" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> contains the offset between cruises <inline-formula><mml:math id="M26" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M27" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula> such that its value is positive if the data from cruise <inline-formula><mml:math id="M28" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> are greater than those from cruise <inline-formula><mml:math id="M29" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula> and negative otherwise.  The matrix is therefore skew-symmetric (i.e., <inline-formula><mml:math id="M30" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>).  The main diagonal and any elements where no offsets could be calculated (Sect. <xref ref-type="sec" rid="Ch1.S2.SS1"/>) are set to zero. The weights assigned to the <inline-formula><mml:math id="M31" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> are also assembled into an <inline-formula><mml:math id="M32" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mo>×</mml:mo><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mi>n</mml:mi></mml:mrow></mml:math></inline-formula> symmetric matrix <inline-formula><mml:math id="M33" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, again with zeroes on the main diagonal and where no offsets are available.</p>
      <p id="d2e854">An <inline-formula><mml:math id="M34" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mo>×</mml:mo><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mi>n</mml:mi></mml:mrow></mml:math></inline-formula> adjustment matrix <inline-formula><mml:math id="M35" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">A</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is initialised, containing all zeros. The values in <inline-formula><mml:math id="M36" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">A</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> are updated on each iteration (<inline-formula><mml:math id="M37" display="inline"><mml:mi>s</mml:mi></mml:math></inline-formula>) of the FF routine.</p>
      <p id="d2e914">An <inline-formula><mml:math id="M38" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mo>×</mml:mo><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mi>n</mml:mi></mml:mrow></mml:math></inline-formula> date-difference matrix <inline-formula><mml:math id="M39" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">D</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> of the time interval between each pair of cruises is calculated. Each element of <inline-formula><mml:math id="M40" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">D</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> contains the date of cruise <inline-formula><mml:math id="M41" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> minus the date of cruise <inline-formula><mml:math id="M42" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula>, in decimal years. <inline-formula><mml:math id="M43" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">D</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is therefore skew-symmetric, like <inline-formula><mml:math id="M44" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e1002">A length <inline-formula><mml:math id="M45" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula> vector <inline-formula><mml:math id="M46" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> of trends (rate of change) in the crossovers is computed. Each element of <inline-formula><mml:math id="M47" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> contains the slope of a weighted least squares regression of the corresponding rows of <inline-formula><mml:math id="M48" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> against <inline-formula><mml:math id="M49" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">D</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, weighted by <inline-formula><mml:math id="M50" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>. A threshold should be applied to determine whether a trend can be computed for each cruise, for example based on the number of crossovers, with trends that are not computed assigned as zero. Any calculated trends judged to be spurious (how best to judge this may vary by application) and thus not retained in the inversion can also be assigned as zero in <inline-formula><mml:math id="M51" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e1089">A trend-adjusted crossover matrix <inline-formula><mml:math id="M52" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is calculated:

                  <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M53" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E1"><mml:mtd><mml:mtext>1</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msubsup><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow><mml:mo>′</mml:mo></mml:msubsup><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:msub><mml:mi mathvariant="bold">D</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E2"><mml:mtd><mml:mtext>2</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msubsup><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow><mml:mo>′</mml:mo></mml:msubsup><mml:mo>-</mml:mo><mml:msubsup><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mo>′</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">T</mml:mi></mml:mrow></mml:msubsup><mml:mo>)</mml:mo><mml:mo>/</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

            where superscript T denotes the transpose of the matrix. <inline-formula><mml:math id="M54" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow><mml:mo>′</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> is similar to <inline-formula><mml:math id="M55" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, but it is no longer skew-symmetric. Each element of <inline-formula><mml:math id="M56" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow><mml:mo>′</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> contains the crossover difference between cruises <inline-formula><mml:math id="M57" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M58" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula>, corrected for the trend in cruise <inline-formula><mml:math id="M59" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula>. As each of cruises <inline-formula><mml:math id="M60" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M61" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula> has a different set of crossovers, their trends are rarely identical. This asymmetry can lead the adjustments calculated by the iterative solver to drift considerably rather than converge. The second step of the calculation, Eq. (<xref ref-type="disp-formula" rid="Ch1.E2"/>), resolves this by averaging the values for each pair of cruises. Each element of <inline-formula><mml:math id="M62" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is thus corrected for the average of the trends in cruises <inline-formula><mml:math id="M63" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M64" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula>, and <inline-formula><mml:math id="M65" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is skew-symmetric. If it is not desired for the inversion to attempt to preserve any apparent trends, then <inline-formula><mml:math id="M66" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> can be used instead of <inline-formula><mml:math id="M67" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> in all subsequent calculations, and <inline-formula><mml:math id="M68" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">D</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M69" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> do not need to be computed.</p>
      <p id="d2e1386">For calculating the uncertainties associated with the weighted mean offsets calculated in the next section, the effective sample size (<inline-formula><mml:math id="M70" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">k</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) is computed from the weights matrix <xref ref-type="bibr" rid="bib1.bibx10" id="paren.20"/>:

              <disp-formula id="Ch1.E3" content-type="numbered"><label>3</label><mml:math id="M71" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">k</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mo>∑</mml:mo><mml:mi>j</mml:mi></mml:msub><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow><mml:mrow><mml:msub><mml:mo>∑</mml:mo><mml:mi>j</mml:mi></mml:msub><mml:msubsup><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e1454">The critical <inline-formula><mml:math id="M72" display="inline"><mml:mi>t</mml:mi></mml:math></inline-formula>-distribution value for each element of <inline-formula><mml:math id="M73" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">k</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, denoted <inline-formula><mml:math id="M74" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">t</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, is also computed. This contains values for the inverse of the cumulative distribution function of the Student's <inline-formula><mml:math id="M75" display="inline"><mml:mi>t</mml:mi></mml:math></inline-formula> distribution with the degrees of freedom specified by <inline-formula><mml:math id="M76" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">k</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and at a desired confidence level (here, <inline-formula><mml:math id="M77" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mi mathvariant="italic">σ</mml:mi></mml:mrow></mml:math></inline-formula>). When multiplied by the standard error of <inline-formula><mml:math id="M78" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> in the next section (Eq. <xref ref-type="disp-formula" rid="Ch1.E7"/>), <inline-formula><mml:math id="M79" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">t</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> gives the <inline-formula><mml:math id="M80" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mi mathvariant="italic">σ</mml:mi></mml:mrow></mml:math></inline-formula> confidence interval for the mean offsets.</p>
      <p id="d2e1554">Finally, a length <inline-formula><mml:math id="M81" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula> Boolean vector <inline-formula><mml:math id="M82" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> may be assembled to identify a set of cruises that are not permitted to be adjusted in the inversion. Cruises that are permitted to be adjusted are assigned as true in <inline-formula><mml:math id="M83" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and those that are not, false. Cruises that are not permitted to be adjusted are still accounted for in the rest of the inversion procedure (e.g., when calculating weighted mean offsets).  This can be used during a complete inversion if certain cruises will not be adjusted.  In GLODAPv3, it will also be used for the annual minor version releases, where adjustments are calculated for and applied to newly added cruises, but the adjustments for existing cruises in the product are not revisited.</p>
</sec>
<sec id="Ch1.S2.SS2.SSS3">
  <label>2.2.3</label><title>Iteration procedure</title>
      <p id="d2e1594">The matrices <inline-formula><mml:math id="M84" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M85" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M86" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">A</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> (where <inline-formula><mml:math id="M87" display="inline"><mml:mi>s</mml:mi></mml:math></inline-formula> denotes the iteration step, starting with <inline-formula><mml:math id="M88" display="inline"><mml:mrow><mml:mi>s</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula>) are used to calculate the vector of weighted mean offsets for each cruise, <inline-formula><mml:math id="M89" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>:

              <disp-formula id="Ch1.E4" content-type="numbered"><label>4</label><mml:math id="M90" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mo>∑</mml:mo><mml:mi>j</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi mathvariant="bold">A</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mo>∑</mml:mo><mml:mi>j</mml:mi></mml:msub><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e1752">Determining the uncertainty in each weighted mean offset (<inline-formula><mml:math id="M91" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>) then requires several further calculations.  First, the residuals between the individual crossovers and the cruise weighted mean offsets are calculated (<inline-formula><mml:math id="M92" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">R</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>):

              <disp-formula id="Ch1.E5" content-type="numbered"><label>5</label><mml:math id="M93" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold">R</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi mathvariant="bold">A</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula>

            The weighted variances (<inline-formula><mml:math id="M94" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">σ</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup></mml:mrow></mml:math></inline-formula>) are then computed as

              <disp-formula id="Ch1.E6" content-type="numbered"><label>6</label><mml:math id="M95" display="block"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">σ</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">k</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:msub><mml:mo>∑</mml:mo><mml:mi>j</mml:mi></mml:msub><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold">R</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">k</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo><mml:msub><mml:mo>∑</mml:mo><mml:mi>j</mml:mi></mml:msub><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:math></disp-formula>

            and are converted into <inline-formula><mml:math id="M96" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mi mathvariant="italic">σ</mml:mi></mml:mrow></mml:math></inline-formula> confidence intervals for each offset (<inline-formula><mml:math id="M97" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>):

              <disp-formula id="Ch1.E7" content-type="numbered"><label>7</label><mml:math id="M98" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">σ</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mi mathvariant="bold-italic">t</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>/</mml:mo><mml:msqrt><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">k</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msqrt></mml:mrow></mml:math></disp-formula>

            Cruises that have crossovers with only one other cruise are assigned a default uncertainty value, which could be adapted depending on the analysis. For GLODAPv3, we used double the standard deviation of all <inline-formula><mml:math id="M99" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> at the corresponding iteration step.</p>
      <p id="d2e2033">Only the cruise with the largest absolute normalised offset is adjusted during each iteration, as follows. An adjustment vector (<inline-formula><mml:math id="M100" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>) is created as a copy of <inline-formula><mml:math id="M101" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>; all elements in <inline-formula><mml:math id="M102" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> representing cruises that are not permitted to be adjusted (based on <inline-formula><mml:math id="M103" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) are set to zero; and then all remaining elements other than the one with the maximum absolute value after normalising to uncertainty are also set to zero:

              <disp-formula id="Ch1.E8" content-type="numbered"><label>8</label><mml:math id="M104" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfenced open="{" close=""><mml:mtable columnspacing="1em" rowspacing="0.2ex" class="cases" columnalign="left left" framespacing="0em"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mtext>where </mml:mtext><mml:mo>(</mml:mo><mml:mtext>abs</mml:mtext><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mtext>max</mml:mtext><mml:mo>(</mml:mo><mml:mtext>abs</mml:mtext><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo><mml:mo>)</mml:mo><mml:mo>)</mml:mo><mml:mtext> and </mml:mtext><mml:msub><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mn mathvariant="normal">0</mml:mn></mml:mtd><mml:mtd><mml:mtext>otherwise</mml:mtext></mml:mtd></mml:mtr></mml:mtable></mml:mfenced></mml:mrow></mml:math></disp-formula>

            The adjustment matrix is updated by adding the adjustment vector to its columns and subtracting it from its rows:

              <disp-formula id="Ch1.E9" content-type="numbered"><label>9</label><mml:math id="M105" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold">A</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold">A</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula>

            Equations (<xref ref-type="disp-formula" rid="Ch1.E4"/>) to (<xref ref-type="disp-formula" rid="Ch1.E9"/>) are repeated until some convergence criterion is reached (Sect. <xref ref-type="sec" rid="Ch1.S2.SS2.SSS4"/>).</p>
      <p id="d2e2284">After the final round of adjustment, the <inline-formula><mml:math id="M106" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mi mathvariant="italic">σ</mml:mi></mml:mrow></mml:math></inline-formula> confidence intervals are calculated with Eq. (<xref ref-type="disp-formula" rid="Ch1.E7"/>) and these can be reported as the cruise-level uncertainties in the final adjusted values.  These values can be compared with the pre-inversion adjustment confidence intervals to assess how much the cruise-level uncertainties have been reduced by the adjustment process.</p>
</sec>
<sec id="Ch1.S2.SS2.SSS4">
  <label>2.2.4</label><title>Convergence criteria</title>
      <p id="d2e2307">The FF routine can be stopped after a set number of iterations or when some threshold is reached, for example based on the size of the adjustments being calculated (which virtually always decreases from one iteration to the next) or some statistic related to the <inline-formula><mml:math id="M107" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> values (i.e., cruise weighted mean offsets). Care must be taken if using adjustment size as a convergence criterion, because, while the adjustments added in subsequent iterations might be individually negligible, they can add up to a significant total change (Sect. <xref ref-type="sec" rid="Ch1.S3.SS1.SSS2"/>).</p>
      <p id="d2e2328">Two different approaches were developed and tested using simulations and the real GLODAPv3 dataset. First, we ran the inversion with all cruises permitted to be adjusted (i.e., <inline-formula><mml:math id="M108" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mi mathvariant="normal">True</mml:mi></mml:mrow></mml:math></inline-formula> for all <inline-formula><mml:math id="M109" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula>), for enough iterations (at least 1 million) for all calculated adjustments to reach steady state with respect to continued iterations. This first approach is referred to as FF<sub>1</sub>.</p>
      <p id="d2e2362">Second, we used a two-step approach. The aim here was to apply an approximate minimum threshold to the size of the adjustments that would be calculated. To begin, the FF inversion was run with all cruises permitted to be adjusted but with a cut-off for stopping iterations at 5 % of the threshold. For example, for dissolved inorganic carbon (DIC) and total alkalinity, the target adjustment threshold was 2 <inline-formula><mml:math id="M111" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi></mml:mrow></mml:math></inline-formula>mol kg<sup>−1</sup>, so the iterations were stopped once suggested absolute adjustments became smaller than 0.1 <inline-formula><mml:math id="M113" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi></mml:mrow></mml:math></inline-formula>mol kg<sup>−1</sup>. After this point, <inline-formula><mml:math id="M115" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> was updated such that any cruise with an absolute adjustment after this set of iterations of less than the total threshold would never be permitted to be adjusted. In the examples given here, the total threshold was kept at 2 <inline-formula><mml:math id="M116" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi></mml:mrow></mml:math></inline-formula>mol kg<sup>−1</sup>, but its value could be revised at this point for example to account for regional variations <xref ref-type="bibr" rid="bib1.bibx11" id="paren.21"/>. The inversion was then restarted from the beginning with the updated <inline-formula><mml:math id="M118" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and run until steady state. This second, two-step approach was used for the final GLODAPv3 analysis and is referred to as FF<sub>2</sub>.</p>
</sec>
<sec id="Ch1.S2.SS2.SSS5">
  <label>2.2.5</label><title>Software implementation</title>
      <p id="d2e2469">The FF inversion approach has been implemented in a free and open-source Python package called xover <xref ref-type="bibr" rid="bib1.bibx6" id="paren.22"><named-content content-type="post"><uri>https://github.com/mvdh7/xover</uri>, last access: 20 October 2026</named-content></xref>.  This is built upon several other Python packages including JAX <xref ref-type="bibr" rid="bib1.bibx1" id="paren.23"/>, NumPy <xref ref-type="bibr" rid="bib1.bibx18 bib1.bibx5" id="paren.24"/>, SciPy <xref ref-type="bibr" rid="bib1.bibx19" id="paren.25"/> and Statsmodels <xref ref-type="bibr" rid="bib1.bibx16" id="paren.26"/>.</p>
</sec>
</sec>
<sec id="Ch1.S2.SS3">
  <label>2.3</label><title>Simulated crossover networks</title>
      <p id="d2e2500">In order to test the FF inversion, we designed an approach to generate arbitrary networks of crossovers with similar statistical properties to the GLODAPv3 network, specifically that for DIC. In a simulated network, the true offsets between cruises and any trends are exactly known, because they are assigned.</p>
      <p id="d2e2503">A series of crossover networks were simulated with different settings (e.g., size of the random offsets; magnitude and type of the trends), including some with and without additional random noise, to investigate how well the FF inversion could retrieve the assigned offsets and trends under different conditions. For each configuration, multiple different networks were simulated with different random number generator seeds to check that our interpretations of the results were generally applicable, rather than being specific to one particular network.</p>
</sec>
</sec>
<sec id="Ch1.S3">
  <label>3</label><title>Results and discussion</title>
<sec id="Ch1.S3.SS1">
  <label>3.1</label><title>FF validation with simulated networks</title>
<sec id="Ch1.S3.SS1.SSS1">
  <label>3.1.1</label><title>Reproducing assigned offsets and trends</title>
      <p id="d2e2529">For simulated networks without noise (i.e., where each crossover exactly represents the assigned offset between its pair of cruises), FF<sub>1</sub> inversion successfully converges on adjustments that are perfectly correlated with the assigned offsets, with a slope of 1. FF<sub>2</sub> inversion converges on adjustments with a good correlation with the assigned offsets close to the ideal slope of 1, with some scatter that scales with the size of the target adjustment threshold (Sect. <xref ref-type="sec" rid="Ch1.S2.SS2.SSS4"/>). In both cases, there can be a small constant bias, because the inversion is designed to target internal consistency between cruises and does not explicitly attempt to minimise the average size of adjustments: adding a constant value to the data for all cruises does not affect the differences between them. The bias is not significant relative to the uncertainties in the overall inversion process, especially when using real datasets, and it could be removed by subtracting the average adjustment from all adjustments after inversion. Either way, a small global bias would not be inconsistent with GLODAP's mission to produce a dataset that is internally consistent while making no claims about its absolute accuracy. However, it should be accounted for as a source of uncertainty for the most accurate work, as it would affect the apparent internal consistency of marine carbonate system calculations.</p>
      <p id="d2e2552">Random noise was also added to the simulated crossover offsets to represent the fact that the data from one particular profile of a cruise may not exactly reflect the overall bias of the cruise. Both FF<sub>1</sub> and FF<sub>2</sub> still worked reliably, calculating adjustments that were well correlated with the assigned offsets and with the scatter about the correlation scaling with the spread of the added random noise.</p>
      <p id="d2e2573">The GLODAPv3 analysis uses data from deeper than 1500 m, on the assumption that there should generally be no significant natural variability through time in biogeochemical variables there. However, in some regions this may not be accurate <xref ref-type="bibr" rid="bib1.bibx15" id="paren.27"><named-content content-type="pre">e.g.,</named-content></xref>, and where clear trends are observed in pre-inversion offsets, the manual QC process has previously tried to avoid eliminating these trends with adjustments. Our simulations confirm that without trend preservation (i.e., using <inline-formula><mml:math id="M124" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> instead of <inline-formula><mml:math id="M125" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>; Sect. <xref ref-type="sec" rid="Ch1.S2.SS2.SSS3"/>), FF<sub>1</sub> does eliminate virtually all temporal trends in cruise offsets. On the other hand, using <inline-formula><mml:math id="M127" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> leads to a good correlation between trends before and after inversion (<inline-formula><mml:math id="M128" display="inline"><mml:mrow><mml:msup><mml:mi>r</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.75</mml:mn></mml:mrow></mml:math></inline-formula>; RMSD <inline-formula><mml:math id="M129" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> 0.06 <inline-formula><mml:math id="M130" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi></mml:mrow></mml:math></inline-formula>mol kg<sup>−1</sup> a<sup>−1</sup>; Fig. <xref ref-type="fig" rid="F1"/>a). The results for trend-preserving FF<sub>2</sub> are very similar to FF<sub>1</sub>, with an <inline-formula><mml:math id="M135" display="inline"><mml:mrow><mml:msup><mml:mi>r</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> of 0.97 between the two approaches (Fig. <xref ref-type="fig" rid="F1"/>b).</p>

      <fig id="F1"><label>Figure 1</label><caption><p id="d2e2726">Relationships between assigned and apparent temporal trends before and after FF inversion for a simulated cruise network including random noise in crossover values. Each data point represents a single cruise in the network, black diagonal lines show the ideal 1 : 1 relationship. <bold>(a)</bold> Trends compared before and after FF<sub>1</sub> inversion with (trend-preserving) and without (standard) trend preservation with <inline-formula><mml:math id="M137" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>. <bold>(b)</bold> Comparison between trends computed after FF<sub>1</sub> and FF<sub>2</sub> inversion. <bold>(c)</bold> Apparent trends computed from the crossover matrix before and after the standard (st.) and trend-preserving (tp.) FF<sub>1</sub> inversion compared with the true trends assigned in the simulation.</p></caption>
            <graphic xlink:href="https://os.copernicus.org/articles/22/3403/2026/os-22-3403-2026-f01.png"/>

          </fig>

      <p id="d2e2795">The correlation between trends before and after inversion is not perfect, but simulation results where the true trends are known shows that this is expected. First, the trends determined from the pre-inversion crossover matrix <inline-formula><mml:math id="M141" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> do not perfectly represent the true assigned trends (<inline-formula><mml:math id="M142" display="inline"><mml:mrow><mml:msup><mml:mi>r</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.46</mml:mn></mml:mrow></mml:math></inline-formula>; RMSD <inline-formula><mml:math id="M143" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula> 0.093 <inline-formula><mml:math id="M144" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi></mml:mrow></mml:math></inline-formula>mol kg<sup>−1</sup> a<sup>−1</sup>; “before” in Fig. <xref ref-type="fig" rid="F1"/>c). The pre-inversion trends are calculated from uncorrected data so the biases in the cruises that the inversion seeks to solve will also cause incorrect trends to be targeted. There is thus uncertainty in the target trend for FF to preserve. Also, trends are averaged across two cruises in Eq. (<xref ref-type="disp-formula" rid="Ch1.E2"/>), so the “target” trend will already not be exactly the same as either cruise's own trend. This means that cruises connected to other cruises with compatible trends will generally have their trends preserved, but not otherwise, which is desirable, because a trend not supported by connected cruises is more likely to be spurious.</p>
      <p id="d2e2871">Real-world datasets have additional complications. Each cruise spans a different geographic extent and trends might therefore differ across the cruise. The crossovers it has are with different cruises at different spatial points where the trend might be different than the average for the first cruise. Real-world trends also normally display variability and changes over time.</p>
      <p id="d2e2874">Despite these limitations, our simulations show that the trends after trend-preserving FF more closely resemble the true assigned trends than before inversion. In the example shown in Fig. <xref ref-type="fig" rid="F1"/>c, the root-mean-square difference (RMSD) between the apparent trends and the true assigned values is <inline-formula><mml:math id="M147" display="inline"><mml:mo>∼</mml:mo></mml:math></inline-formula> 20 % lower after trend-preserving inversion than before inversion.</p>
</sec>
<sec id="Ch1.S3.SS1.SSS2">
  <label>3.1.2</label><title>Convergence of the FF solution</title>
      <p id="d2e2894">In simulated networks, convergence within well-connected “clusters” of cruises – representing regions or ocean basins within the real dataset – happens relatively quickly (e.g., within <inline-formula><mml:math id="M148" display="inline"><mml:mo>∼</mml:mo></mml:math></inline-formula> 5000 FF iterations for a GLODAP-like network of <inline-formula><mml:math id="M149" display="inline"><mml:mo>∼</mml:mo></mml:math></inline-formula> 500 cruises), and then these clusters are drawn together over a much greater number of iterations (Fig. <xref ref-type="fig" rid="F2"/>). The rate at which clusters converge depends on how well-connected they are, with the real GLODAP dataset taking towards 1 000 000 iterations to converge if all cruises are permitted to be adjusted (Fig. <xref ref-type="fig" rid="F2"/>). Essentially, cruises within the better-connected clusters are adjusted so that they are internally consistent within the clusters first, and then these clusters as a whole converge towards the cluster containing the greatest number of cruises.  This cluster convergence takes many more iterations, as multiple cruises have to be shifted together.</p>

      <fig id="F2"><label>Figure 2</label><caption><p id="d2e2917"><bold>(a)</bold> Network graph for the simulation used to illustrate convergence of clusters in <bold>(b)</bold>. Each coloured circle represents a cruise, and the lines show crossovers between cruises.  The colours mark the different clusters; these do not correspond to real ocean basins.  <bold>(b)</bold> Cruise adjustments normalised to their true assigned offsets through the inversion process for a simulated dataset. Each line represents a different cruise and the colours match <bold>(a)</bold>, showing the “regions” in the dataset. The final adjustments <inline-formula><mml:math id="M150" display="inline"><mml:mo>+</mml:mo></mml:math></inline-formula> offsets converge on a globally biased value of around 0.25 <inline-formula><mml:math id="M151" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi></mml:mrow></mml:math></inline-formula>mol kg<sup>−1</sup>, close to where the largest cluster (dark blue) initially converges, as discussed in Sect. <xref ref-type="sec" rid="Ch1.S3.SS1.SSS2"/>. Note the change in horizontal axis scale at 10 000 iterations, indicated by the vertical black line.</p></caption>
            <graphic xlink:href="https://os.copernicus.org/articles/22/3403/2026/os-22-3403-2026-f02.png"/>

          </fig>

      <p id="d2e2967">It is necessary for the crossover matrix to be symmetrical for the solution to converge reliably. Trends can be slightly more accurately preserved by not symmetrising the trend-corrected crossover matrix, i.e., using <inline-formula><mml:math id="M153" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow><mml:mo>′</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> instead of <inline-formula><mml:math id="M154" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> in the inversion. However, using <inline-formula><mml:math id="M155" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow><mml:mo>′</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> generally causes the FF iterations to fail to converge, because for each pair of cruises <inline-formula><mml:math id="M156" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M157" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula>, the adjustment that should be applied to minimise the offset from the perspective of <inline-formula><mml:math id="M158" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> is generally inconsistent with that from the perspective of <inline-formula><mml:math id="M159" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula>. This means that there is a continuous drift in adjustments upon continuing iterations, so no usable solution is returned.</p>
</sec>
<sec id="Ch1.S3.SS1.SSS3">
  <label>3.1.3</label><title>Uncertainties in adjusted cruises</title>
      <p id="d2e3054">We find overall reductions in the cruise-level uncertainties (<inline-formula><mml:math id="M160" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>; Eq. <xref ref-type="disp-formula" rid="Ch1.E7"/>) after FF inversion both in simulations and tests with real data. Using the GLODAPv3 DIC dataset as an example, FF<sub>2</sub> inversion with a minimum adjustment cut-off (Sect. <xref ref-type="sec" rid="Ch1.S2.SS2.SSS4"/>) adjusts 24 % of <inline-formula><mml:math id="M162" display="inline"><mml:mo>∼</mml:mo></mml:math></inline-formula> 500 cruises and reduces the average cruise-level uncertainty to <inline-formula><mml:math id="M163" display="inline"><mml:mo>∼</mml:mo></mml:math></inline-formula> 80 % of its pre-inversion value.  This reduction in uncertainty is consistent across all cruises, including those that were not permitted to be adjusted.  Using FF<sub>1</sub> inversion with all cruises adjusted reduces this uncertainty further to 50 % of pre-inversion.  These numbers support the statement that the FF<sub>2</sub> approach used by GLODAP attempts to maximise internal consistency of the data product while still avoiding small or uncertain adjustments.</p>
</sec>
</sec>
<sec id="Ch1.S3.SS2">
  <label>3.2</label><title>Comparison between FF and WLSQ inversion</title>
<sec id="Ch1.S3.SS2.SSS1">
  <label>3.2.1</label><title>Quantitative results</title>
      <p id="d2e3135">As discussed in Sect. <xref ref-type="sec" rid="Ch1.S1"/>, for the GLODAPv3 dataset, the WLSQ inversion returned adjustments for some variables with significant regional biases, where roughly consistent adjustments were calculated across entire regions. While the WLSQ result was mathematically valid, adjusting an entire region is not consistent with the GLODAP philosophy, which prefers to make as few adjustments as possible, and it conflicts with our earlier reasoning (Sect. <xref ref-type="sec" rid="Ch1.S1"/>) that the apparent regional differences are more likely an artefact of random uncertainties in the limited number of cruises that connect between regions than a true bias. We will use the real GLODAPv3 DIC dataset as an example in this section.</p>

      <fig id="F3" specific-use="star"><label>Figure 3</label><caption><p id="d2e3144">Network graph for the real GLODAPv3 DIC dataset. Each node (circle) represents a cruise and the edges (lines) represent crossovers used in the inversion. The colours and sizes of the nodes indicate the adjustment value calculated by the inversion. <bold>(a)</bold> FF<sub>1</sub> inversion with all cruises adjusted. The WLSQ inversion results produce a virtually identical pattern except with all values <inline-formula><mml:math id="M167" display="inline"><mml:mo>∼</mml:mo></mml:math></inline-formula> 2.4 <inline-formula><mml:math id="M168" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi></mml:mrow></mml:math></inline-formula>mol kg<sup>−1</sup> lower (Sect. <xref ref-type="sec" rid="Ch1.S3.SS2.SSS1"/>). <bold>(b)</bold> FF<sub>2</sub> inversion with a minimum cut-off for adjustments applied, as used for GLODAPv3.</p></caption>
            <graphic xlink:href="https://os.copernicus.org/articles/22/3403/2026/os-22-3403-2026-f03.png"/>

          </fig>

      <p id="d2e3207">For the same dataset, the FF<sub>1</sub> inversion returns a similar set of regional biases (Fig. <xref ref-type="fig" rid="F3"/>a) with an almost perfect correlation with the WLSQ adjustments (<inline-formula><mml:math id="M172" display="inline"><mml:mrow><mml:msup><mml:mi>r</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.999</mml:mn></mml:mrow></mml:math></inline-formula>; Fig. <xref ref-type="fig" rid="F4"/>a). This demonstrates that FF does converge on a valid set of adjustments. The mean adjustment for the WLSQ approach is virtually zero, while FF<sub>1</sub> gives a mean adjustment of <inline-formula><mml:math id="M174" display="inline"><mml:mo>∼</mml:mo></mml:math></inline-formula> 2.4 <inline-formula><mml:math id="M175" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi></mml:mrow></mml:math></inline-formula>mol kg<sup>−1</sup>. This discrepancy is not unexpected given that the approach does not have an explicit constraint to hold some particular average value constant, as discussed in Sect. <xref ref-type="sec" rid="Ch1.S3.SS1.SSS1"/>. Again, it would be perfectly valid to add or subtract a constant from all calculated adjustments to have an average of zero.</p>

      <fig id="F4"><label>Figure 4</label><caption><p id="d2e3280">Comparisons between adjustments calculated by the different inversion approaches for the real GLODAPv3 DIC dataset. Diagonal black lines show the ideal 1 : 1 relationship. <bold>(a)</bold> FF<sub>1</sub> compared with WLSQ, where all cruises are permitted to be adjusted in both cases. <bold>(b)</bold> FF<sub>1</sub> with adjustments permitted for all cruises compared with FF<sub>2</sub> with a minimum cut-off for adjustments.</p></caption>
            <graphic xlink:href="https://os.copernicus.org/articles/22/3403/2026/os-22-3403-2026-f04.png"/>

          </fig>

      <p id="d2e3322">When implemented globally, the two inversion approaches (WLSQ and FF<sub>1</sub>) both indicate that there appears to be a bias of around 6 <inline-formula><mml:math id="M181" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi></mml:mrow></mml:math></inline-formula>mol kg<sup>−1</sup> between the Atlantic and Pacific regions. WLSQ corrects the bias by adjusting the Pacific downwards and the Atlantic upwards, whereas FF leaves the Pacific roughly at zero and adjusts the Atlantic upwards more. Which of these (or any other) options is correct is a subjective judgement that cannot be determined objectively by any inversion method. Figure <xref ref-type="fig" rid="F3"/> shows that the Pacific contains more cruises than the other regions and that these are all very densely connected. FF<sub>1</sub> therefore adjusts the other cruises towards this more densely packed region, as discussed further in Sect. <xref ref-type="sec" rid="Ch1.S3.SS2.SSS2"/>.  This conceptual explanation is provided for context, and we reiterate that GLODAP has never used a global WLSQ nor FF<sub>1</sub>.</p>
      <p id="d2e3377">However, if a cut-off is used to adjust only a subset of the cruises (i.e., FF<sub>2</sub>), then a different pattern emerges: the regional biases disappear, and the pattern of adjustments is more random (Fig. <xref ref-type="fig" rid="F3"/>b), as we expect. The adjustments are correlated with the FF<sub>1</sub> version, but there are significant differences (Fig. <xref ref-type="fig" rid="F4"/>b). This highlights that choosing not to adjust some cruises changes the adjustments that should be used for other cruises, and it is not valid to select only a subset of points to adjust from WLSQ or FF<sub>1</sub>. The adjustment calculated for a given cruise depends on if and how the cruises around it are also adjusted. Using FF<sub>2</sub> eliminates this problem with the GLODAP strategy that only became apparent after a global WLSQ was attempted.</p>
      <p id="d2e3421">In some applications, the FF<sub>1</sub> solution may be more appropriate to apply than FF<sub>2</sub>. Determining which option to use requires expert analysis of the results and understanding of the underlying system. In this instance, as discussed in more detail in the GLODAPv3 data description paper <xref ref-type="bibr" rid="bib1.bibx11" id="paren.28"/>, we can see that the different ocean basins are relatively poorly connected together; for example, the Pacific and Indian-Atlantic are connected by a single cruise in the Southern Ocean (Fig. <xref ref-type="fig" rid="F3"/>). This means that entire regions are shifted to satisfy apparent offsets in a very small number of connecting cruises. If these offsets are thought to be meaningful then FF<sub>1</sub> might be appropriate. On the other hand, if they are more dominated by random noise in the individual offsets then using FF<sub>2</sub> is better.</p>
</sec>
<sec id="Ch1.S3.SS2.SSS2">
  <label>3.2.2</label><title>Qualitative differences</title>
      <p id="d2e3474">The main motivation for investigating alternative approaches to the WLSQ method used in earlier versions of GLODAP was that the WLSQ results had unusual features that were difficult to interpret such as the apparent regional biases when applied globally. From the user perspective, the calculation proceeds in a single step that returns the full set of calculated adjustments in one go, which means that it is challenging to rationalise why a particular unexpected adjustment has been made and thus to decide whether or not to accept it. The FF approach is simpler to understand, and the solution can be investigated one iteration at a time to see why a particular adjustment has been calculated. The regional patterns in the DIC adjustment discussed in the previous section are a clear example.</p>
      <p id="d2e3477">The practical difference between WLSQ and FF can be thought of as analogous to the difference between a mean and a median. Consider a cluster of connected cruises where one “bad” cruise has a large true offset but all others are “good” with near-zero offsets. The WLSQ solution treats the cluster together and will calculate a smaller than necessary adjustment for the bad cruise, compensated for by also requiring a small constant adjustment to all of the good cruises. On the other hand, the FF would adjust the bad cruise first, bringing it into line with the good cruises, for which no constant adjustment would be required. However, in the real world we do not necessarily know which cruises are good and which are bad. FF assumes that if a large number of cruises agree with each other and a smaller number disagree, then the majority are correct, which may not always be the case. For example, if lots of cruises were conducted by one particular laboratory and that laboratory does have biased results, then a single cruise passing through the same area with data from an unbiased laboratory would receive an erroneous adjustment. If such a case were identified through independent evidence, both WLSQ and FF could be initialised with a correction to the biased dataset(s), eliminating the problem.</p>
      <p id="d2e3480">In earlier versions of GLODAP, some cruises had such large offsets that they skewed the results of the WLSQ inversion. This problem was circumvented by iteratively applying manual pre-inversion adjustments to these cruises before running WLSQ. With FF, such pre-inversion adjustments are generally not necessary, because isolated cruises with very large offsets will be adjusted first so the adjustments for the cruises connected to them will not be adversely affected by their initial presence. However, if there is some independent reason (i.e., not as a result of the crossover analysis) why a specific correction is thought to be appropriate for a cruise, then it is still advisable to apply this before running FF. The FF approach also has the capability of preserving temporal trends in the crossovers to some extent, as discussed in the previous section. WLSQ behaves more like the standard FF, actively eliminating any trends. It might be possible to devise an equivalent adaptation for WLSQ, but to the best of our knowledge, this has not yet been done.</p>
</sec>
</sec>
</sec>
<sec id="Ch1.S4" sec-type="conclusions">
  <label>4</label><title>Conclusions</title>
      <p id="d2e3493">The FF inversion method can calculate a set of adjustments that are consistent with the WLSQ solution, but with additional flexibility to adjust a subset of cruises and approximately preserve selected temporal trends. The FF<sub>2</sub> variant, where a two-step process is used to identify a subset of cruises with smaller offsets to not adjust, effectively eliminates the problem of regional biases that appear under WLSQ and FF<sub>1</sub>, which is desirable for the GLODAPv3 application. It also ensures that the final set of adjustments are optimal accounting for the fact that not all cruises will be adjusted. The conceptual simplicity of the FF approach allows the reasons for particular adjustments to be investigated in greater detail. However, while inversion algorithms are an invaluable starting point for the QC process, decisions must still be made such as choosing convergence criteria, which cruises to permit the algorithm to adjust, and which trends it should attempt to preserve. Therefore, no algorithm can completely replace expert assessment.</p>
</sec>

      
      </body>
    <back><app-group>

<app id="App1.Ch1.S1">
  <label>Appendix A</label><title>Glossary of symbols</title>
      <p id="d2e3526">All matrices are shape <inline-formula><mml:math id="M195" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mo>×</mml:mo><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mi>n</mml:mi></mml:mrow></mml:math></inline-formula> and all vectors length <inline-formula><mml:math id="M196" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula>. <table-wrap position="anchor"><oasis:table><oasis:tgroup cols="2">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="justify" colwidth="6.5cm"/>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1"><bold>Symbol</bold></oasis:entry>
         <oasis:entry colname="col2" align="left"><bold>Description</bold></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M197" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">A matrix row</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M198" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">A matrix column</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M199" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Total number of cruises</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M200" display="inline"><mml:mi>s</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">An iteration step</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M201" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Adjustments per cruise (Eq. <xref ref-type="disp-formula" rid="Ch1.E8"/>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M202" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Cruise weighted mean offsets (Eq. <xref ref-type="disp-formula" rid="Ch1.E4"/>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M203" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">k</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Effective degrees of freedom (Eq. <xref ref-type="disp-formula" rid="Ch1.E3"/>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M204" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Cruises permitted to be adjusted (Sect. <xref ref-type="sec" rid="Ch1.S2.SS2.SSS2"/>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M205" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">t</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Critical t distribution values (Sect. <xref ref-type="sec" rid="Ch1.S2.SS2.SSS2"/>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M206" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Standard errors in cruise weighted mean offsets (Eq. <xref ref-type="disp-formula" rid="Ch1.E7"/>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M207" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">σ</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Weighted standard deviations of residuals (Eq. <xref ref-type="disp-formula" rid="Ch1.E6"/>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M208" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">A</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Adjustment matrix (Sect. <xref ref-type="sec" rid="Ch1.S2.SS2.SSS2"/>; Eq. <xref ref-type="disp-formula" rid="Ch1.E9"/>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M209" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Crossover matrix of offsets between cruises (Sect. <xref ref-type="sec" rid="Ch1.S2.SS2.SSS2"/>)</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

<table-wrap position="anchor"><oasis:table><oasis:tgroup cols="2">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="justify" colwidth="6.5cm"/>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M210" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">D</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Date-difference matrix of time intervals between cruises (Sect. <xref ref-type="sec" rid="Ch1.S2.SS2.SSS2"/>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M211" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">R</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Matrix of crossover residuals (Eq. <xref ref-type="disp-formula" rid="Ch1.E5"/>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M212" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow><mml:mo>′</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Trend-adjusted crossover matrix (Eq. <xref ref-type="disp-formula" rid="Ch1.E1"/>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M213" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">T</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Symmetrised trend-adjusted crossover matrix (Eq. <xref ref-type="disp-formula" rid="Ch1.E2"/>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M214" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2" align="left">Crossover weights matrix (Sect. <xref ref-type="sec" rid="Ch1.S2.SS2.SSS2"/>)</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap></p>
</app>
  </app-group><notes notes-type="codedataavailability"><title>Code and data availability</title>

      <p id="d2e3987">The code and data used for all analysis and to generate the figures in this manuscript are freely available online <xref ref-type="bibr" rid="bib1.bibx7" id="paren.29"><named-content content-type="pre"><ext-link xlink:href="https://doi.org/10.5281/zenodo.22975289" ext-link-type="DOI">10.5281/zenodo.22975289</ext-link>;</named-content></xref>.</p>
  </notes><notes notes-type="authorcontribution"><title>Author contributions</title>

      <p id="d2e4000">M. P. Humphreys: conceptualisation, formal analysis, investigation, methodology, software, validation, visualisation, writing – original draft.  S. K. Lauvset: conceptualisation, funding acquisition, methodology, project administration, writing – original draft. N. Lange: conceptualisation, data curation, formal analysis, investigation, methodology, software, writing – original draft.  H. C. Bittig: conceptualisation, formal analysis, investigation, writing – review &amp; editing.  B. R. Carter, M. Hoppema, A. Murata, A. Olsen, T. Tanhua, A. Ulfsbo, A. Velo, and R. J. Woosley: conceptualisation, writing – review &amp; editing.  K. Azetsu-Scott, J. D. Müller, and F. F. Pérez: conceptualisation.</p>
  </notes><notes notes-type="competinginterests"><title>Competing interests</title>

      <p id="d2e4006">At least one of the (co-)authors is a member of the editorial board of <italic>Ocean Science</italic>. The peer-review process was guided by an independent editor, and the authors also have no other competing interests to declare.</p>
  </notes><notes notes-type="disclaimer"><title>Disclaimer</title>

      <p id="d2e4015">Publisher's note: Copernicus Publications remains neutral with regard to jurisdictional claims made in the text, published maps, institutional affiliations, or any other geographical representation in this paper. The authors bear the ultimate responsibility for providing appropriate place names. Views expressed in the text are those of the authors and do not necessarily reflect the views of the publisher.</p>
  </notes><ack><title>Acknowledgements</title><p id="d2e4021">S. K. Lauvset and N. Lange acknowledge funding from the European Union under grant agreement no. 101083922 (OceanICU). Views and opinions expressed are those of the author(s) only and do not necessarily reflect those of the European Union or European Research Executive Agency. Neither the European Union nor the granting authority can be held responsible for them.  B. R. Carter is supported by the Carbon Data Management and Synthesis Project (Fund Ref. 10000729) of the Global Ocean Monitoring and Observing division of the National Oceanic and Atmospheric Administration. The PMEL and CICOES contributions are numbers 5887 and 2026-1573, respectively. K. Azetsu-Scott acknowledges funding from Fisheries and Oceans Canada, including ACCASP, OFSI, and AZOMP.  J. D. Müller receives funding for a research fellowship through the Carbon to Sea initiative.  F. F. Pérez was supported by the FICARAM (PID2023-148924OB-I00) and BOCATS2 (PID2019-104279GB-C21) projects, which are funded by MCIN/AEI/10.13039/501100011033 and ERDF-EU. We thank Denis Pierrot, Christopher Sabine and an anonymous NOAA internal reviewer for their constructive feedback on this manuscript.</p></ack><notes notes-type="financialsupport"><title>Financial support</title>

      <p id="d2e4026">This research has been supported by the European Commission, HORIZON EUROPE Framework Programme (grant no. 101083922).</p>
  </notes><notes notes-type="reviewstatement"><title>Review statement</title>

      <p id="d2e4032">This paper was edited by Xinping Hu and reviewed by Denis Pierrot and Christopher Sabine.</p>
  </notes><ref-list>
    <title>References</title>

      <ref id="bib1.bibx1"><label>Bradbury et al.(2018)Bradbury, Frostig, Hawkins, Johnson, Leary, Maclaurin, Necula, Paszke, VanderPlas, Wanderman-Milne, and Zhang</label><mixed-citation>Bradbury, J., Frostig, R., Hawkins, P., Johnson, M. J., Leary, C., Maclaurin, D., Necula, G., Paszke, A., VanderPlas, J., Wanderman-Milne, S., and Zhang, Q.: JAX: composable transformations of Python+NumPy programs, GitHub, <uri>https://github.com/jax-ml/jax</uri> (last access: 20 October 2026), 2018.</mixed-citation></ref>
      <ref id="bib1.bibx2"><label>Friedlingstein et al.(2026)</label><mixed-citation>Friedlingstein, P., O'Sullivan, M., Jones, M. W., Andrew, R. M., Bakker, D. C. E., Hauck, J., Landschützer, P., Le Quéré, C., Li, H., Luijkx, I. T., Peters, G. P., Peters, W., Pongratz, J., Schwingshackl, C., Sitch, S., Canadell, J. G., Ciais, P., Aas, K., Alin, S. R., Anthoni, P., Barbero, L., Bates, N. R., Bellouin, N., Benoit-Cattin, A., Berghoff, C. F., Bernardello, R., Bopp, L., Brasika, I. B. M., Chamberlain, M. A., Chandra, N., Chevallier, F., Chini, L. P., Collier, N. O., Colligan, T. H., Cronin, M., Djeutchouang, L. M., Dou, X., Enright, M. P., Enyo, K., Erb, M., Evans, W., Feely, R. A., Feng, L., Ford, D. J., Foster, A., Fransner, F., Gasser, T., Gehlen, M., Gkritzalis, T., Goncalves De Souza, J., Grassi, G., Gregor, L., Gruber, N., Guenet, B., Gürses, Ö., Harrington, K., Harris, I., Heinke, J., Hurtt, G. C., Iida, Y., Ilyina, T., Ito, A., Jacobson, A. R., Jain, A. K., Jarníková, T., Jersild, A., Jiang, F., Jones, S. D., Kato, E., Keeling, R. F., Klein Goldewijk, K., Knauer, J., Kong, Y., Korsbakken, J. I., Koven, C., Kunimitsu, T., Lan, X., Liu, J., Liu, Z., Liu, Z., Lo Monaco, C., Ma, L., Marland, G., McGuire, P. C., McKinley, G. A., Melton, J. R., Monacci, N., Monier, E., Morgan, E. J., Munro, D. R., Müller, J. D., Nakaoka, S.-I., Nayagam, L. R., Niwa, Y., Nutzel, T., Olsen, A., Omar, A. M., Pan, N., Pandey, S., Pierrot, D., Qin, Z., Regnier, P., Rehder, G., Resplandy, L., Roobaert, A., Rosan, T. M., Rödenbeck, C., Schwinger, J., Skjelvan, I., Smallman, T. L., Spada, V., Sreeush, M. G., Sun, Q., Sutton, A. J., Sweeney, C., Swingedouw, D., Séférian, R., Takao, S., Tatebe, H., Tian, H., Tian, X., Tilbrook, B., Tsujino, H., Tubiello, F., van Ooijen, E., van der Werf, G. R., van de Velde, S. J., Walker, A. P., Wanninkhof, R., Yang, X., Yuan, W., Yue, X., and Zeng, J.: Global Carbon Budget 2025, Earth Syst. Sci. Data, 18, 3211–3288, <ext-link xlink:href="https://doi.org/10.5194/essd-18-3211-2026" ext-link-type="DOI">10.5194/essd-18-3211-2026</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx3"><label>Gouretski and Jancke(2001)</label><mixed-citation>Gouretski, V. V. and Jancke, K.: Systematic errors as the cause for an apparent deep water property variability: global analysis of the WOCE and historical hydrographic data, Prog. Oceanogr., 48, 337–402, <ext-link xlink:href="https://doi.org/10.1016/S0079-6611(00)00049-5" ext-link-type="DOI">10.1016/S0079-6611(00)00049-5</ext-link>, 2001.</mixed-citation></ref>
      <ref id="bib1.bibx4"><label>Gruber(2011)</label><mixed-citation>Gruber, N.: Warming up, turning sour, losing breath: ocean biogeochemistry under global change, Philos. T. Roy. Soc. A, 369, 1980–1996, <ext-link xlink:href="https://doi.org/10.1098/rsta.2011.0003" ext-link-type="DOI">10.1098/rsta.2011.0003</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bibx5"><label>Harris et al.(2020)</label><mixed-citation>Harris, C. R., Millman, K. J., van der Walt, S. J., Gommers, R., Virtanen, P., Cournapeau, D., Wieser, E., Taylor, J., Berg, S., Smith, N. J., Kern, R., Picus, M., Hoyer, S., van Kerkwijk, M. H., Brett, M., Haldane, A., del Río, J. F., Wiebe, M., Peterson, P., Gérard-Marchant, P., Sheppard, K., Reddy, T., Weckesser, W., Abbasi, H., Gohlke, C., and Oliphant, T. E.: Array programming with NumPy, Nature, 585, 357–362, <ext-link xlink:href="https://doi.org/10.1038/s41586-020-2649-2" ext-link-type="DOI">10.1038/s41586-020-2649-2</ext-link>,  2020.</mixed-citation></ref>
      <ref id="bib1.bibx6"><label>Humphreys(2025)</label><mixed-citation>Humphreys, M. P.: xover: crossover analysis tools for GLODAP, Zenodo, <ext-link xlink:href="https://doi.org/10.5281/zenodo.17829762" ext-link-type="DOI">10.5281/zenodo.17829762</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx7"><label>Humphreys and Lange(2026)</label><mixed-citation>Humphreys, M. P. and Lange, N.: Analysis and figures accompanying the GLODAPv3 methods paper (mvdh7/glodap3-methods), Zenodo [code, data set], <ext-link xlink:href="https://doi.org/10.5281/zenodo.22975289" ext-link-type="DOI">10.5281/zenodo.22975289</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx8"><label>Johnson et al.(2001)Johnson, Robbins, and Hufford</label><mixed-citation>Johnson, G. C., Robbins, P. E., and Hufford, G. E.: Systematic adjustments of hydrographic sections for internal consistency, J. Atmos. Ocean. Tech., 18, 1234–1244, <ext-link xlink:href="https://doi.org/10.1175/1520-0426(2001)018&lt;1234:saohsf&gt;2.0.co;2" ext-link-type="DOI">10.1175/1520-0426(2001)018&lt;1234:saohsf&gt;2.0.co;2</ext-link>, 2001.</mixed-citation></ref>
      <ref id="bib1.bibx9"><label>Key et al.(2004)Key, Kozyr, Sabine, Lee, Wanninkhof, Bullister, Feely, Millero, Mordy, and Peng</label><mixed-citation>Key, R. M., Kozyr, A., Sabine, C. L., Lee, K., Wanninkhof, R., Bullister, J. L., Feely, R. A., Millero, F. J., Mordy, C., and Peng, T.-H.: A global ocean carbon climatology: Results from Global Data Analysis Project (GLODAP), Global Biogeochem. Cy., 18, GB4031, <ext-link xlink:href="https://doi.org/10.1029/2004gb002247" ext-link-type="DOI">10.1029/2004gb002247</ext-link>, 2004.</mixed-citation></ref>
      <ref id="bib1.bibx10"><label>Kish(1965)</label><mixed-citation> Kish, L.: Survey Sampling, John Wiley &amp; Sons, Inc., NY, ISBN 0-471-48900-X, 1965.</mixed-citation></ref>
      <ref id="bib1.bibx11"><label>Lange et al.(2026)Lange, Lauvset, Carter, Humphreys, Woosley, Olsen, Bittig, Kozyr, Álvarez, Azetsu-Scott, Becker, Brown, Cotrim da Cunha, Dias, Hoppema, Ishii, Jeansson, Murata, Müller, Pérez, Schirnick, Steinfeldt, Ulfsbo, Velo, and Tanhua</label><mixed-citation>Lange, N., Lauvset, S. K., Carter, B. R., Humphreys, M. P., Woosley, R. J., Olsen, A., Bittig, H. C., Kozyr, A., Álvarez, M., Azetsu-Scott, K., Becker, S., Brown, P. J., Cotrim da Cunha, L., Dias, L., Hoppema, M., Ishii, M., Jeansson, E., Murata, A., Müller, J. D., Pérez, F. F., Schirnick, C., Steinfeldt, R., Ulfsbo, A., Velo, A., and Tanhua, T.: The Global Ocean Data Analysis Project version 3 (GLODAPv3) – an internally consistent biogeochemical data product for the world ocean, Earth Syst. Sci. Data Discuss. [preprint], <ext-link xlink:href="https://doi.org/10.5194/essd-2026-496" ext-link-type="DOI">10.5194/essd-2026-496</ext-link>, in review, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx12"><label>Lauvset and Tanhua(2015)</label><mixed-citation>Lauvset, S. K. and Tanhua, T.: A toolbox for secondary quality control on ocean chemistry and hydrographic data, Limnol. Oceanogr. Meth., <ext-link xlink:href="https://doi.org/10.1002/lom3.10050" ext-link-type="DOI">10.1002/lom3.10050</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx13"><label>Li et al.(2023)Li, England, and Groeskamp</label><mixed-citation>Li, Z., England, M. H., and Groeskamp, S.: Recent acceleration in global ocean heat accumulation by mode and intermediate waters, Nat. Commun., 14, 6888, <ext-link xlink:href="https://doi.org/10.1038/s41467-023-42468-z" ext-link-type="DOI">10.1038/s41467-023-42468-z</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx14"><label>Olsen et al.(2016)Olsen, Key, van Heuven, Lauvset, Velo, Lin, Schirnick, Kozyr, Tanhua, Hoppema, Jutterström, Steinfeldt, Jeansson, Ishii, Pérez, and Suzuki</label><mixed-citation>Olsen, A., Key, R. M., van Heuven, S., Lauvset, S. K., Velo, A., Lin, X., Schirnick, C., Kozyr, A., Tanhua, T., Hoppema, M., Jutterström, S., Steinfeldt, R., Jeansson, E., Ishii, M., Pérez, F. F., and Suzuki, T.: The Global Ocean Data Analysis Project version 2 (GLODAPv2) – an internally consistent data product for the world ocean, Earth Syst. Sci. Data, 8, 297–323, <ext-link xlink:href="https://doi.org/10.5194/essd-8-297-2016" ext-link-type="DOI">10.5194/essd-8-297-2016</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx15"><label>Perez et al.(2018)Perez, Fontela, García-Ibáñez, Mercier, Velo, Lherminier, Zunino, Paz, Alonso-Pérez, Guallart, and Padin</label><mixed-citation>Perez, F. F., Fontela, M., García-Ibáñez, M. I., Mercier, H., Velo, A., Lherminier, P., Zunino, P., Paz, M. d. l., Alonso-Pérez, F., Guallart, E. F., and Padin, X. A.: Meridional overturning circulation conveys fast acidification to the deep Atlantic Ocean, Nature, 554, 515–518, <ext-link xlink:href="https://doi.org/10.1038/nature25493" ext-link-type="DOI">10.1038/nature25493</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx16"><label>Seabold and Perktold(2010)</label><mixed-citation>Seabold, S. and Perktold, J.: Statsmodels: Econometric and statistical modeling with Python, in: 9th Python in Science Conference, <ext-link xlink:href="https://doi.org/10.25080/Majora-92bf1922-011" ext-link-type="DOI">10.25080/Majora-92bf1922-011</ext-link>, 2010.</mixed-citation></ref>
      <ref id="bib1.bibx17"><label>Tanhua et al.(2010)Tanhua, Van Heuven, Key, Velo, Olsen, and Schirnick</label><mixed-citation>Tanhua, T., van Heuven, S., Key, R. M., Velo, A., Olsen, A., and Schirnick, C.: Quality control procedures and methods of the CARINA database, Earth Syst. Sci. Data, 2, 35–49, <ext-link xlink:href="https://doi.org/10.5194/essd-2-35-2010" ext-link-type="DOI">10.5194/essd-2-35-2010</ext-link>, 2010.</mixed-citation></ref>
      <ref id="bib1.bibx18"><label>van der Walt et al.(2011)van der Walt, Colbert, and Varoquaux</label><mixed-citation>van der Walt, S., Colbert, S. C., and Varoquaux, G.: The NumPy Array: A Structure for Efficient Numerical Computation, Comput. Sci. Eng., 13, 22–30, <ext-link xlink:href="https://doi.org/10.1109/MCSE.2011.37" ext-link-type="DOI">10.1109/MCSE.2011.37</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bibx19"><label>Virtanen et al.(2020)Virtanen, Gommers, Oliphant, Haberland, Reddy, Cournapeau, Burovski, Peterson, Weckesser, Bright, van der Walt, Brett, Wilson, Millman, Mayorov, Nelson, Jones, Kern, Larson, Carey, Polat, Feng, Moore, VanderPlas, Laxalde, Perktold, Cimrman, Henriksen, Quintero, Harris, Archibald, Ribeiro, Pedregosa, van Mulbregt, and SciPy 1.0 Contributors</label><mixed-citation>Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T., Cournapeau, D., Burovski, E., Peterson, P., Weckesser, W., Bright, J., van der Walt, S. J., Brett, M., Wilson, J., Millman, K. J., Mayorov, N., Nelson, A. R. J., Jones, E., Kern, R., Larson, E., Carey, C. J., Polat, I., Feng, Y., Moore, E. W., VanderPlas, J., Laxalde, D., Perktold, J., Cimrman, R., Henriksen, I., Quintero, E. A., Harris, C. R., Archibald, A. M., Ribeiro, A. H., Pedregosa, F., van Mulbregt, P., and SciPy 1.0 Contributors: SciPy 1.0: Fundamental Algorithms for Scientific Computing in Python, Nat. Meth., 17, 261–272, <ext-link xlink:href="https://doi.org/10.1038/s41592-019-0686-2" ext-link-type="DOI">10.1038/s41592-019-0686-2</ext-link>, 2020. </mixed-citation></ref>
      <ref id="bib1.bibx20"><label>Wright(2015)</label><mixed-citation>Wright, S. J.: Coordinate descent algorithms, Math. Program., 151, 3–34, <ext-link xlink:href="https://doi.org/10.1007/s10107-015-0892-3" ext-link-type="DOI">10.1007/s10107-015-0892-3</ext-link>, 2015.</mixed-citation></ref>

  </ref-list></back>
    <!--<article-title-html>Furthest-first inversion for internal consistency adjustments in the biogeochemical data product GLODAPv3</article-title-html>
<abstract-html/>
<ref-html id="bib1.bib1"><label>Bradbury et al.(2018)Bradbury, Frostig, Hawkins, Johnson, Leary,
Maclaurin, Necula, Paszke, VanderPlas, Wanderman-Milne, and
Zhang</label><mixed-citation>
      
Bradbury, J., Frostig, R., Hawkins, P., Johnson, M. J., Leary, C., Maclaurin,
D., Necula, G., Paszke, A., VanderPlas, J., Wanderman-Milne, S., and
Zhang, Q.: JAX: composable transformations of Python+NumPy programs, GitHub, <a href="https://github.com/jax-ml/jax" target="_blank"/> (last access: 20 October 2026), 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib2"><label>Friedlingstein et al.(2026)</label><mixed-citation>
      
Friedlingstein, P., O'Sullivan, M., Jones, M. W., Andrew, R. M., Bakker, D. C. E., Hauck, J., Landschützer, P., Le Quéré, C., Li, H., Luijkx, I. T., Peters, G. P., Peters, W., Pongratz, J., Schwingshackl, C., Sitch, S., Canadell, J. G., Ciais, P., Aas, K., Alin, S. R., Anthoni, P., Barbero, L., Bates, N. R., Bellouin, N., Benoit-Cattin, A., Berghoff, C. F., Bernardello, R., Bopp, L., Brasika, I. B. M., Chamberlain, M. A., Chandra, N., Chevallier, F., Chini, L. P., Collier, N. O., Colligan, T. H., Cronin, M., Djeutchouang, L. M., Dou, X., Enright, M. P., Enyo, K., Erb, M., Evans, W., Feely, R. A., Feng, L., Ford, D. J., Foster, A., Fransner, F., Gasser, T., Gehlen, M., Gkritzalis, T., Goncalves De Souza, J., Grassi, G., Gregor, L., Gruber, N., Guenet, B., Gürses, Ö., Harrington, K., Harris, I., Heinke, J., Hurtt, G. C., Iida, Y., Ilyina, T., Ito, A., Jacobson, A. R., Jain, A. K., Jarníková, T., Jersild, A., Jiang, F., Jones, S. D., Kato, E., Keeling, R. F., Klein Goldewijk, K., Knauer, J., Kong, Y., Korsbakken, J. I., Koven, C., Kunimitsu, T., Lan, X., Liu, J., Liu, Z., Liu, Z., Lo Monaco, C., Ma, L., Marland, G., McGuire, P. C., McKinley, G. A., Melton, J. R., Monacci, N., Monier, E., Morgan, E. J., Munro, D. R., Müller, J. D., Nakaoka, S.-I., Nayagam, L. R., Niwa, Y., Nutzel, T., Olsen, A., Omar, A. M., Pan, N., Pandey, S., Pierrot, D., Qin, Z., Regnier, P., Rehder, G., Resplandy, L., Roobaert, A., Rosan, T. M., Rödenbeck, C., Schwinger, J., Skjelvan, I., Smallman, T. L., Spada, V., Sreeush, M. G., Sun, Q., Sutton, A. J., Sweeney, C., Swingedouw, D., Séférian, R., Takao, S., Tatebe, H., Tian, H., Tian, X., Tilbrook, B., Tsujino, H., Tubiello, F., van Ooijen, E., van der Werf, G. R., van de Velde, S. J., Walker, A. P., Wanninkhof, R., Yang, X., Yuan, W., Yue, X., and Zeng, J.: Global Carbon Budget 2025, Earth Syst. Sci. Data, 18, 3211–3288, <a href="https://doi.org/10.5194/essd-18-3211-2026" target="_blank">https://doi.org/10.5194/essd-18-3211-2026</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib3"><label>Gouretski and Jancke(2001)</label><mixed-citation>
      
Gouretski, V. V. and Jancke, K.: Systematic errors as the cause for an apparent
deep water property variability: global analysis of the WOCE and historical
hydrographic data, Prog. Oceanogr., 48, 337–402,
<a href="https://doi.org/10.1016/S0079-6611(00)00049-5" target="_blank">https://doi.org/10.1016/S0079-6611(00)00049-5</a>, 2001.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib4"><label>Gruber(2011)</label><mixed-citation>
      
Gruber, N.: Warming up, turning sour, losing breath: ocean biogeochemistry
under global change, Philos. T. Roy. Soc.
A, 369, 1980–1996,
<a href="https://doi.org/10.1098/rsta.2011.0003" target="_blank">https://doi.org/10.1098/rsta.2011.0003</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib5"><label>Harris et al.(2020)</label><mixed-citation>
      
Harris, C. R., Millman, K. J., van der Walt, S. J., Gommers, R., Virtanen, P.,
Cournapeau, D., Wieser, E., Taylor, J., Berg, S., Smith, N. J., Kern, R.,
Picus, M., Hoyer, S., van Kerkwijk, M. H., Brett, M., Haldane, A., del Río,
J. F., Wiebe, M., Peterson, P., Gérard-Marchant, P., Sheppard, K., Reddy,
T., Weckesser, W., Abbasi, H., Gohlke, C., and Oliphant, T. E.: Array
programming with NumPy, Nature, 585, 357–362,
<a href="https://doi.org/10.1038/s41586-020-2649-2" target="_blank">https://doi.org/10.1038/s41586-020-2649-2</a>,  2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib6"><label>Humphreys(2025)</label><mixed-citation>
      
Humphreys, M. P.: xover: crossover analysis tools for GLODAP, Zenodo,
<a href="https://doi.org/10.5281/zenodo.17829762" target="_blank">https://doi.org/10.5281/zenodo.17829762</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib7"><label>Humphreys and Lange(2026)</label><mixed-citation>
      
Humphreys, M. P. and Lange, N.: Analysis and figures accompanying the
GLODAPv3 methods paper (mvdh7/glodap3-methods), Zenodo [code, data set],
<a href="https://doi.org/10.5281/zenodo.22975289" target="_blank">https://doi.org/10.5281/zenodo.22975289</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib8"><label>Johnson et al.(2001)Johnson, Robbins, and
Hufford</label><mixed-citation>
      
Johnson, G. C., Robbins, P. E., and Hufford, G. E.: Systematic adjustments of
hydrographic sections for internal consistency, J. Atmos.
Ocean. Tech., 18, 1234–1244,
<a href="https://doi.org/10.1175/1520-0426(2001)018&lt;1234:saohsf&gt;2.0.co;2" target="_blank">https://doi.org/10.1175/1520-0426(2001)018&lt;1234:saohsf&gt;2.0.co;2</a>, 2001.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib9"><label>Key et al.(2004)Key, Kozyr, Sabine, Lee, Wanninkhof, Bullister,
Feely, Millero, Mordy, and Peng</label><mixed-citation>
      
Key, R. M., Kozyr, A., Sabine, C. L., Lee, K., Wanninkhof, R., Bullister,
J. L., Feely, R. A., Millero, F. J., Mordy, C., and Peng, T.-H.: A global
ocean carbon climatology: Results from Global Data Analysis Project (GLODAP),
Global Biogeochem. Cy., 18, GB4031, <a href="https://doi.org/10.1029/2004gb002247" target="_blank">https://doi.org/10.1029/2004gb002247</a>, 2004.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib10"><label>Kish(1965)</label><mixed-citation>
      
Kish, L.: Survey Sampling, John Wiley &amp; Sons, Inc., NY, ISBN 0-471-48900-X,
1965.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib11"><label>Lange et al.(2026)Lange, Lauvset, Carter, Humphreys, Woosley, Olsen,
Bittig, Kozyr, Álvarez, Azetsu-Scott, Becker, Brown, Cotrim da Cunha, Dias,
Hoppema, Ishii, Jeansson, Murata, Müller, Pérez, Schirnick, Steinfeldt,
Ulfsbo, Velo, and Tanhua</label><mixed-citation>
      
Lange, N., Lauvset, S. K., Carter, B. R., Humphreys, M. P., Woosley, R. J., Olsen, A., Bittig, H. C., Kozyr, A., Álvarez, M., Azetsu-Scott, K., Becker, S., Brown, P. J., Cotrim da Cunha, L., Dias, L., Hoppema, M., Ishii, M., Jeansson, E., Murata, A., Müller, J. D., Pérez, F. F., Schirnick, C., Steinfeldt, R., Ulfsbo, A., Velo, A., and Tanhua, T.: The Global Ocean Data Analysis Project version 3 (GLODAPv3) – an internally consistent biogeochemical data product for the world ocean, Earth Syst. Sci. Data Discuss. [preprint], <a href="https://doi.org/10.5194/essd-2026-496" target="_blank">https://doi.org/10.5194/essd-2026-496</a>, in review, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib12"><label>Lauvset and Tanhua(2015)</label><mixed-citation>
      
Lauvset, S. K. and Tanhua, T.: A toolbox for secondary quality control on ocean
chemistry and hydrographic data, Limnol. Oceanogr. Meth.,
<a href="https://doi.org/10.1002/lom3.10050" target="_blank">https://doi.org/10.1002/lom3.10050</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib13"><label>Li et al.(2023)Li, England, and Groeskamp</label><mixed-citation>
      
Li, Z., England, M. H., and Groeskamp, S.: Recent acceleration in global ocean
heat accumulation by mode and intermediate waters, Nat. Commun., 14,
6888, <a href="https://doi.org/10.1038/s41467-023-42468-z" target="_blank">https://doi.org/10.1038/s41467-023-42468-z</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib14"><label>Olsen et al.(2016)Olsen, Key, van Heuven, Lauvset, Velo, Lin,
Schirnick, Kozyr, Tanhua, Hoppema, Jutterström, Steinfeldt, Jeansson, Ishii,
Pérez, and Suzuki</label><mixed-citation>
      
Olsen, A., Key, R. M., van Heuven, S., Lauvset, S. K., Velo, A., Lin, X., Schirnick, C., Kozyr, A., Tanhua, T., Hoppema, M., Jutterström, S., Steinfeldt, R., Jeansson, E., Ishii, M., Pérez, F. F., and Suzuki, T.: The Global Ocean Data Analysis Project version 2 (GLODAPv2) – an internally consistent data product for the world ocean, Earth Syst. Sci. Data, 8, 297–323, <a href="https://doi.org/10.5194/essd-8-297-2016" target="_blank">https://doi.org/10.5194/essd-8-297-2016</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib15"><label>Perez et al.(2018)Perez, Fontela, García-Ibáñez, Mercier, Velo,
Lherminier, Zunino, Paz, Alonso-Pérez, Guallart, and
Padin</label><mixed-citation>
      
Perez, F. F., Fontela, M., García-Ibáñez, M. I., Mercier, H., Velo, A.,
Lherminier, P., Zunino, P., Paz, M. d. l., Alonso-Pérez, F., Guallart,
E. F., and Padin, X. A.: Meridional overturning circulation conveys fast
acidification to the deep Atlantic Ocean, Nature, 554, 515–518,
<a href="https://doi.org/10.1038/nature25493" target="_blank">https://doi.org/10.1038/nature25493</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib16"><label>Seabold and Perktold(2010)</label><mixed-citation>
      
Seabold, S. and Perktold, J.: Statsmodels: Econometric and statistical modeling
with Python, in: 9th Python in Science Conference, <a href="https://doi.org/10.25080/Majora-92bf1922-011" target="_blank">https://doi.org/10.25080/Majora-92bf1922-011</a>, 2010.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib17"><label>Tanhua et al.(2010)Tanhua, Van Heuven, Key, Velo, Olsen, and
Schirnick</label><mixed-citation>
      
Tanhua, T., van Heuven, S., Key, R. M., Velo, A., Olsen, A., and Schirnick, C.: Quality control procedures and methods of the CARINA database, Earth Syst. Sci. Data, 2, 35–49, <a href="https://doi.org/10.5194/essd-2-35-2010" target="_blank">https://doi.org/10.5194/essd-2-35-2010</a>, 2010.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib18"><label>van der Walt et al.(2011)van der Walt, Colbert, and
Varoquaux</label><mixed-citation>
      
van der Walt, S., Colbert, S. C., and Varoquaux, G.: The NumPy Array: A
Structure for Efficient Numerical Computation, Comput. Sci.
Eng., 13, 22–30, <a href="https://doi.org/10.1109/MCSE.2011.37" target="_blank">https://doi.org/10.1109/MCSE.2011.37</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib19"><label>Virtanen et al.(2020)Virtanen, Gommers, Oliphant, Haberland, Reddy,
Cournapeau, Burovski, Peterson, Weckesser, Bright, van der Walt, Brett,
Wilson, Millman, Mayorov, Nelson, Jones, Kern, Larson, Carey, Polat, Feng,
Moore, VanderPlas, Laxalde, Perktold, Cimrman, Henriksen, Quintero, Harris,
Archibald, Ribeiro, Pedregosa, van Mulbregt, and SciPy 1.0
Contributors</label><mixed-citation>
      
Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T.,
Cournapeau, D., Burovski, E., Peterson, P., Weckesser, W., Bright, J.,
van der Walt, S. J., Brett, M., Wilson, J., Millman, K. J., Mayorov, N.,
Nelson, A. R. J., Jones, E., Kern, R., Larson, E., Carey, C. J., Polat, I.,
Feng, Y., Moore, E. W., VanderPlas, J., Laxalde, D., Perktold, J., Cimrman,
R., Henriksen, I., Quintero, E. A., Harris, C. R., Archibald, A. M., Ribeiro,
A. H., Pedregosa, F., van Mulbregt, P., and SciPy 1.0 Contributors: SciPy
1.0: Fundamental Algorithms for Scientific Computing in Python,
Nat. Meth., 17, 261–272, <a href="https://doi.org/10.1038/s41592-019-0686-2" target="_blank">https://doi.org/10.1038/s41592-019-0686-2</a>, 2020.


    </mixed-citation></ref-html>
<ref-html id="bib1.bib20"><label>Wright(2015)</label><mixed-citation>
      
Wright, S. J.: Coordinate descent algorithms, Math. Program., 151,
3–34, <a href="https://doi.org/10.1007/s10107-015-0892-3" target="_blank">https://doi.org/10.1007/s10107-015-0892-3</a>, 2015.

    </mixed-citation></ref-html>--></article>
