# physics.py

This module contains all of the firn-densification models.

## physics.py

The Community Firn Model physics module.

equations for each of the densification models.

class `physics.``FirnPhysics`(PhysParams)

  class for the various firn densification schemes

  The standard parameters that get passed are: iii, steps, gridLen, bdotSec, bdot_mean, bdot_type, Tz, T10m, rho, sigma, dt, Ts, r2, physGrain

  if you want to add physics that require more parameters, you need to change the ‘PhysParams’ dictionary in both the spin and nospin classes.

  Parameters

    - steps – # of steps per year

    - gridLen –

    - bdotSec –

    - Tz –

    - rho –

    - sigma –

  Return drho_dt

  Return viscosity

  `Arthern_2010S`()

    This is the steady-state solution described in the main text of Arthern et al. (2010) Accumulation units are kg/m^2/year

  `Arthern_2010T`()

    This is the transient solution described in the appendix of Arthern et al. (2010)

    Uses stress rather than accumulation rate.

  `Barnola_1991`()

    uses m W.E. (zone 1) and stress (zone 2)

  `Breant2017`()

    Bréant, C., Martinerie, P., Orsi, A., Arnaud, L., and Landais, A.: Modelling firn thickness evolution during the last deglaciation: constraints on sensitivity to temperature and impurities, Clim. Past, 13, 833–853, https://doi.org/10.5194/cp-13-833-2017, 2017.

  `Crocus`()

    Uses stress

  `GSFC2020`()

    Taken from Medley et al. (2020) Accumulation units are kg/m^2/year Subscript here are changed to 1 and 2 (correspond to densification stage) (in Medley et al. 2020 they are 0 and 1)

  `Goujon_2003`()

    Uses stress

  `HL_Sigfus`()

    Accumulation units are m W.E. per year (zone 1); uses stress for zone 2

  `HL_dynamic`()

    Accumulation units are m W.E. per year viscosity doesn’t work

  `Helsen_2008`()

    Accumulation units are m W.E. per year (?) Equation is from Arthern et al. 2010 (2) (Arthern implies units are m I.E.; not doing that here)

  `KuipersMunneke_2015`()

    Units are mm W.E. per year b_dot is meant to be accumulation over a reference period (20 years for spin up, 1 year for regular?) (not mean over the lifetime of a parcel)

  `Li_2004`()

    Accumulation units are m W.E. per year (?) Equation from Arthern, 2010 (eq. 2): not sure where Rob got that? (Arthern implies accumulation is m I.E./year for bdot; not doing that here.) Paper would lead me to believe that it is m W.E.

    Needs to have the vapor flux coded in if we want to use these physics properly.

  `Li_2011`()

    Accumulation units are m W.E. per year (email correspondence with J. Li, 12/3/13) Temperature in the equation for beta is in C. Temperature in the 8.36(273.15-T)**-2.061 is in K. (implied in Arthern)

    beta should be calculated with the long-term mean accumulation rate

  `Li_2015`()

    Accumulation units are m W.E. per year (email correspondence with J. Li, 12/3/13) Temperature in the equation for beta is in C. Temperature in the 8.36(273.15-T)**-2.061 is in K. (implied in Arthern)

    beta should be calculated with the long-term mean accumulation rate

  `Ligtenberg_2011`()

    Units are mm W.E. per year b_dot is meant to be accumulation over a reference period (20 years for spin up, 1 year for regular?) (not mean over the lifetime of a parcel)

  `Max2018`()

    Experimental: based on firn compaction data from FirnCover campaigns

  `Max2018b`()

    Experimental: based on firn compaction data from FirnCover campaigns

  `Morris_HL_2014`()

    Uses stress instead of accumulation.

    Need to choose physics for zone 2. Herron and Langway here.

  `Simonsen_2013`()

    Accumulation units are kg/m^2/year

  `graincalc`(iii)

    Evolve the grain size

    This is the same as graingrowth except that we do not calculate for the surface grain, which is done by surfacegrain() function

  `surfacegrain`()

    function to calculate the surface grain size at each time step