Package: pymyami
MyAMIThe MyAMI Specific Ion Interaction Model for correcting stoichiometric equilibrium constants (Ks) for variations in seawater composition, made available available as thepymyamipython package.This package is a re-factor of the MyAMI model published byHain et al. (2015), which is availablehere. The key differences between the original model and this package are:Speed: All calculations have been vectorised using NumPy, making MyAMI 2-3 orders of magnitude faster.Direct Calculation:pymyamidirectly calculates correction factors using the MyAMI model. This differs fromHain et al. (2015), where the focus was on modifying parameters that could be input into the standard equations for calculating stoichiometric equilibrium products.Correction Factor Focus:pymyamiproducescorrections factors(FX,MyAMI) that can be applied to adjust stoichiometric equilibrium constants for variations in seawater composition, following KX,corr= KX,empirical* FX,MyAMI. For the direct calculation of Ks, including the corrections calculated bypymyami, please see theKgenproject.Available Ions:pymyamiallows the modification of any ion in the model, rather than just Mg and Ca: Na+, K+, Mg2+, Ca2+, Sr2+, Cl-, B(OH)4-, HCO3-, CO32-and SO42-.Parameter Transparrency: Wherever possible, parameter tables are now constructed on-the-fly from raw tables in the Appendix ofMillero & Pierrot, 1998, making the origin of parameters explicit.Pure Python: There is no longer interface code for interacting with other languages (i.e. MATLAB). This caused a substantial performance bottleneck, and is discouraged. TheKgenproject provides a convenient interface to usepymyamiin R and MATLAB.Approximation Method: Where very fast calculations are required (e.g. Monte Carlo methods),pymyamiuses a high-dimensional polynomial to approximate FX,MyAMIas a function of temperature, salinity, Mg and Ca. This is a very fast approximation, but is only accurate to within ~0.25%.Kgenpymyamionly calculationscorrection factorsthat can be applied to stoichiometric equilibrium constants (Ks). If you are looking for a convenient way to adjust Ks for variations in seawater composition, please see theKgenproject.Consistency with Hain et al. (2015)The K correction factors calculated bypymyamiare similar to those calculated by the code ofHain et al. (2015), although there are some notable deviations of up to 4%. A summary of maximum and average differences compared to Hain et al. (2015) follows:K0: 0.00% max, 0.00% avg
  K1: 0.92% max, 0.05% avg
  K2: 3.77% max, -0.07% avg
  KW: 2.35% max, -0.42% avg
  KB: 0.92% max, 0.05% avg
  KspA: 1.87% max, 0.04% avg
  KspC: 1.87% max, 0.04% avg
  KS: 1.83% max, 0.10% avgNote that maximum deviations are seen when the change in Mg and Ca correlates, meaning that these deviations shouldn't be too important for palaeo-seawater calculations because the concentration of Mg and Ca tend to be anti-correlated through geological history.These differences arise from typo corrections in the original code, and pymyami should be closer to the original MIAMI model of Millerot and Pierrot (1998).InstallationThe model is available as a PyPI package, which can be installed by:pipinstallpymyamiExample Usagefrompymyamiimportcalculate_seawater_correction,approximate_seawater_correction# run the model to calculate correction factorscalculate_seawater_correction(TempC=35,Sal=36.2,Mg=0.03,Ca=0.012)>>>{'KspC':0.7843309390178521,'KspA':0.7843309390178521,'K1':1.002405617170862,'K2':0.7885093392132683,'KW':0.7459757009835559,'KB':0.9382494946753764,'K0':1.0056418412233974,'KS':0.9573891319238595}# use the polynomial approximation to calculate correction factorsapproximate_seawater_correction(TempC=35,Sal=36.2,Mg=0.03,Ca=0.012)>>>UserWarning:WARNING:usingapproximateMyAMIKcorrectionfactorsinsteadofcalculatedones.Theseareonlyaccuratetowithin~0.25%.Pleasedontusethemforanythingcritical.>>>{'K0':array(1.00565919),'K1':array(1.00238861),'K2':array(0.78858314),'KB':array(0.93815884),'KW':array(0.74594823),'KspC':array(0.78442705),'KspA':array(0.78442705),'KS':array(0.95738293)}