Skill Tracer
Skills › Scientific Agent Skills › marine-carbonate-chemistry › chemistry-decisions.md

chemistry-decisions.md

101 lines · skills/marine-carbonate-chemistry/references/chemistry-decisions.md at 5f2bc03

Open on GitHub
1# Chemistry decisions that affect the answer
2

Chemistry decisions that affect the answer

Raw lines 1 to 2
3## Constant sets and seawater composition
4
5The helper requires `--k-carbonic`; it does not infer a constant set from the dataset.
6Its two supported options are:
7
8| Option | Carbonic-acid parameterization | Documented calibration interval |
9|---|---|---|
10| 10 | Lueker, Dickson & Keeling (2000) | 2 < T < 35 C; 19 < Practical Salinity < 43 |
11| 15 | Waters, Millero & Woosley (2014) | 0 < T < 45 C; 0 < Practical Salinity < 45 |
13These temperature/salinity intervals come from the [PyCO2SYS v1 settings documentation](https://pyco2sys.readthedocs.io/en/latest/co2sys_nd/).
14They are checks on one part of the model, not proof that all chemical assumptions are
15valid. Pressure corrections do not remove the need to assess constants and sample
16composition. Boundary values are flagged conservatively. Both measurement and output
17conditions are checked.
19Choose the convention established for the study, and explain changes. The helper's
20`--total-borate 1` uses Uppstrom (1974); `2` uses Lee et al. (2010). Neither automatically
21handles an altered boron-to-salinity ratio. Calcium, sulfate, and fluoride are inferred
22by the library's seawater relationships. Freshwater mixing, unusual ionic composition,
23and substantial organic alkalinity can violate these assumptions even if the selected
24carbonic-acid constants permit that salinity. Use direct composition-aware calculations
25when those terms matter; do not substitute salinity zero into a normal-seawater recipe.

Constant sets and seawater composition

The helper requires --k-carbonic; it does not infer a constant set from the dataset. Its two supported options are:

OptionCarbonic-acid parameterizationDocumented calibration interval
10Lueker, Dickson & Keeling (2000)2 < T < 35 C; 19 < Practical Salinity < 43
15Waters, Millero & Woosley (2014)0 < T < 45 C; 0 < Practical Salinity < 45

These temperature/salinity intervals come from the PyCO2SYS v1 settings documentation. They are checks on one part of the model, not proof that all chemical assumptions are valid. Pressure corrections do not remove the need to assess constants and sample composition. Boundary values are flagged conservatively. Both measurement and output conditions are checked.

Choose the convention established for the study, and explain changes. The helper's --total-borate 1 uses Uppstrom (1974); 2 uses Lee et al. (2010). Neither automatically handles an altered boron-to-salinity ratio. Calcium, sulfate, and fluoride are inferred by the library's seawater relationships. Freshwater mixing, unusual ionic composition, and substantial organic alkalinity can violate these assumptions even if the selected carbonic-acid constants permit that salinity. Use direct composition-aware calculations when those terms matter; do not substitute salinity zero into a normal-seawater recipe.

Raw lines 3 to 26
27## Measurement-scale checks
29Total, seawater, free, and NBS pH are not interchangeable. The scale belongs to the
30method and calibration record, not a numerical guess. NBS electrode readings in
31seawater warrant particular attention to calibration and activity conventions.
32PyCO2SYS accepts the declared input scale; the bundled report consistently emits total pH.
34Gas measurements must specify seawater pCO2 or fCO2 and the equilibrator/measurement
35temperature. Atmospheric mole fraction in ppm is not a seawater pCO2 observation.
36The helper intentionally omits gas-flux calculations: a flux additionally requires
37consistent air/water gas quantities and an appropriate gas-transfer model.
39For a closed sample, convert both known parameters at their actual input conditions
40and request output temperature/pressure. Never set laboratory-measured pH's input
41temperature to the ocean temperature just because the desired result is in situ.
42For subsurface gas observations, also establish whether the measurement includes
43hydrostatic gas corrections. The helper fixes `opt_pressured_kCO2=0` and flags nonzero
44sea pressure; a fully pressure-corrected gas observation needs a verified direct call
45with the matching convention. This option controls solubility and fugacity, not the
46other pressure-dependent equilibria.

Measurement-scale checks

Total, seawater, free, and NBS pH are not interchangeable. The scale belongs to the method and calibration record, not a numerical guess. NBS electrode readings in seawater warrant particular attention to calibration and activity conventions. PyCO2SYS accepts the declared input scale; the bundled report consistently emits total pH.

Gas measurements must specify seawater pCO2 or fCO2 and the equilibrator/measurement temperature. Atmospheric mole fraction in ppm is not a seawater pCO2 observation. The helper intentionally omits gas-flux calculations: a flux additionally requires consistent air/water gas quantities and an appropriate gas-transfer model.

For a closed sample, convert both known parameters at their actual input conditions and request output temperature/pressure. Never set laboratory-measured pH's input temperature to the ocean temperature just because the desired result is in situ. For subsurface gas observations, also establish whether the measurement includes hydrostatic gas corrections. The helper fixes opt_pressured_kCO2=0 and flags nonzero sea pressure; a fully pressure-corrected gas observation needs a verified direct call with the matching convention. This option controls solubility and fugacity, not the other pressure-dependent equilibria.

Raw lines 27 to 47
48## Uncertainty that matches the claim
50The helper forwards explicitly supplied standard uncertainties to PyCO2SYS v1's
51finite-difference propagation. Its reported u values assume independent input errors.
52Missing u columns imply zero uncertainty for that input. Constant uncertainty,
53method bias, preservation error, and unmodeled solutes are absent from that budget.
55For a more complete analysis:
571. Define which measured quantities share calibration or preparation errors. TA and
58 DIC errors may covary; also avoid treating the same temperature measurement as two
59 independent uncertain inputs merely because input/output columns both exist.
602. With independent errors, a tailored `pyco2.sys` call can use
61 `uncertainty_into` and `uncertainty_from`, including suitable equilibrium-constant
62 uncertainties. Upstream provides `pyco2.uncertainty_OEDG18`; inspect its assumptions
63 before adopting it. Input/output constant uncertainties require deliberate treatment
64 of their shared errors: `pk_carbonic_1_both` applies one shared pK perturbation to
65 input/output conditions, whereas separate `pk_carbonic_1` and `pk_carbonic_1_out`
66 entries are independent. `_both` requires output conditions. `__f` specifies a
67 fractional uncertainty (for example `total_borate__f`); the helper's CSV `u_`
68 columns always specify absolute uncertainties and do not expose these extensions.
693. With covariance or appreciable nonlinearity, use a scientifically justified joint
70 error model, propagate paired Monte Carlo draws through the solver, and check output
71 quantiles and invalid draws. Document distributions, correlations, seed, convergence,
72 and any truncation. This extension is not implemented by the bundled helper.
734. Compare replicate precision and certified-reference-material results with the
74 assumed uncertainties. Numerical propagation cannot recover unknown measurement bias.
76Read the [upstream uncertainty guide](https://pyco2sys.readthedocs.io/en/latest/uncertainty/)
77when implementing those extensions. Keep helper u values labeled as **conditional,
78independent-input uncertainty**, not a complete accuracy claim.
80For a local linear covariance calculation, request `grads_of` and `grads_wrt` from
81`pyco2.sys`, assemble the gradient in the same variable order and units as the covariance
82matrix, and evaluate `variance = gradient @ covariance @ gradient.T`. The result keys are
83`d_<result>__d_<argument>`, for example `d_pH_total__d_par1`. Check symmetry and positive
84semidefiniteness of the covariance matrix and confirm finite-difference step sensitivity.
85This direct-call extension is not part of the helper's independent-input CSV workflow.

Uncertainty that matches the claim

The helper forwards explicitly supplied standard uncertainties to PyCO2SYS v1's finite-difference propagation. Its reported u values assume independent input errors. Missing u columns imply zero uncertainty for that input. Constant uncertainty, method bias, preservation error, and unmodeled solutes are absent from that budget.

For a more complete analysis:

  1. Define which measured quantities share calibration or preparation errors. TA and DIC errors may covary; also avoid treating the same temperature measurement as two independent uncertain inputs merely because input/output columns both exist.
  2. With independent errors, a tailored pyco2.sys call can use uncertainty_into and uncertainty_from, including suitable equilibrium-constant uncertainties. Upstream provides pyco2.uncertainty_OEDG18; inspect its assumptions before adopting it. Input/output constant uncertainties require deliberate treatment of their shared errors: pk_carbonic_1_both applies one shared pK perturbation to input/output conditions, whereas separate pk_carbonic_1 and pk_carbonic_1_out entries are independent. _both requires output conditions. __f specifies a fractional uncertainty (for example total_borate__f); the helper's CSV u_ columns always specify absolute uncertainties and do not expose these extensions.
  3. With covariance or appreciable nonlinearity, use a scientifically justified joint error model, propagate paired Monte Carlo draws through the solver, and check output quantiles and invalid draws. Document distributions, correlations, seed, convergence, and any truncation. This extension is not implemented by the bundled helper.
  4. Compare replicate precision and certified-reference-material results with the assumed uncertainties. Numerical propagation cannot recover unknown measurement bias.

Read the upstream uncertainty guide when implementing those extensions. Keep helper u values labeled as conditional, independent-input uncertainty, not a complete accuracy claim.

For a local linear covariance calculation, request grads_of and grads_wrt from pyco2.sys, assemble the gradient in the same variable order and units as the covariance matrix, and evaluate variance = gradient @ covariance @ gradient.T. The result keys are d_<result>__d_<argument>, for example d_pH_total__d_par1. Check symmetry and positive semidefiniteness of the covariance matrix and confirm finite-difference step sensitivity. This direct-call extension is not part of the helper's independent-input CSV workflow.

Raw lines 48 to 86
87## Interpret at the right level
89- Saturation state describes thermodynamics relative to a named mineral; it is not a
90 kinetic dissolution model, coral health score, or universal biological threshold.
91- The Revelle factor describes the local relative pCO2 sensitivity to relative DIC
92 change at constant TA and conditions. Use an explicit new equilibrium for a large
93 perturbation rather than extending a local linear sensitivity indefinitely.
94- A controlled increase in DIC at fixed TA can illustrate a carbonate response to CO2
95 addition. It does not reproduce all drivers of a real ocean acidification time series.
96- Alkalinity addition scenarios require mixing, precipitation, and gas-exchange
97 accounting before making carbon-removal claims; the closed-equilibrium solver alone
98 establishes none of these budgets.
100For methods context and solver validation, cite [Humphreys et al. (2022)](https://doi.org/10.5194/gmd-15-15-2022)
101and the relevant constants/measurement-method references for the actual study.

Interpret at the right level

  • Saturation state describes thermodynamics relative to a named mineral; it is not a kinetic dissolution model, coral health score, or universal biological threshold.
  • The Revelle factor describes the local relative pCO2 sensitivity to relative DIC change at constant TA and conditions. Use an explicit new equilibrium for a large perturbation rather than extending a local linear sensitivity indefinitely.
  • A controlled increase in DIC at fixed TA can illustrate a carbonate response to CO2 addition. It does not reproduce all drivers of a real ocean acidification time series.
  • Alkalinity addition scenarios require mixing, precipitation, and gas-exchange accounting before making carbon-removal claims; the closed-equilibrium solver alone establishes none of these budgets.

For methods context and solver validation, cite Humphreys et al. (2022) and the relevant constants/measurement-method references for the actual study.

Raw lines 87 to 101