FundamentalsInput Parameters

Input Parameters

BioSNICAR is configured through run_model() keyword arguments or the inputs.yaml file. This page documents every parameter.

Illumination

ParameterKeyTypeDefaultDescription
Solar zenith anglesolzenint50Degrees from vertical (1–89). Higher = more oblique.
Direct/diffusedirectint11 = clear sky (direct beam), 0 = overcast (diffuse).
Incoming spectrumincomingint0Index 0–6 selecting atmospheric irradiance profile. Set in inputs.yaml.

The incoming parameter selects from pre-computed irradiance spectra representing different atmospheric conditions. It is a discrete index and cannot be continuously interpolated.

Ice column structure

ParameterKeyTypeDefaultDescription
Layer typelayer_typeint or list00 = granular snow, 1 = solid ice with Fresnel, 3 = solid ice without Fresnel
Layer thicknessdzlist[float][0.02, 0.146]Thickness of each layer in metres
Grain/bubble radiusrdsint or list500Effective radius in µm
Densityrhoint or list400Bulk density in kg/m³
Grain shapeshpint or list00=sphere, 1=spheroid, 2=hex plate, 3=Koch snowflake, 4=hex prism
Grain aspect ratiograin_arfloat or list1.0Aspect ratio for non-spherical grains
Liquid water contentlwcfloat or list0.0Fractional liquid water content
Hex side lengthhex_sidefloat or list50Side length for hexagonal prism grains (µm)
Hex lengthhex_lengthfloat or list100Length for hexagonal prism grains (µm)

How list overrides work

When you pass a list, each element corresponds to a layer. The number of layers is determined by the longest list you pass:

# 5-layer configuration
outputs = run_model(
    dz=[0.02, 0.05, 0.05, 0.05, 0.83],
    rds=[800, 900, 1000, 1100, 1200],
    rho=[500, 600, 700, 750, 800],
)

If a list override changes the number of layers, all per-layer attributes are automatically resized:

  • Ice properties (rds, rho, grain_ar, etc.) are extended by repeating their last value
  • Impurity concentrations are zero-padded

This means you only need to specify the parameters you care about.

Scalar overrides

Scalar values for ice parameters are broadcast to all layers. Scalar impurity concentrations are applied to the first layer only:

# rds=1000 applies to all layers; algae only in surface layer
outputs = run_model(rds=1000, glacier_algae=50000)

Impurity concentrations

ParameterKeyTypeUnitDescription
Black carbonblack_carbonfloat or listppbSoot from combustion
Snow algaesnow_algaefloat or listcells/mLSphaerocystis-type algae
Glacier algaeglacier_algaefloat or listcells/mLAncylonema-type filamentous algae
Mineral dustdustfloat or listppbMineral aerosol
# Scalar: applied to first layer only
run_model(black_carbon=5000, glacier_algae=50000)
 
# Per-layer list
run_model(glacier_algae=[40000, 10000, 0])

Advanced parameters

These parameters are not exposed as run_model() keyword overrides. Change them by editing inputs.yaml directly or passing a custom YAML via input_file=:

run_model(input_file="path/to/custom_inputs.yaml")
ParameterLocationDescription
Refractive index variantOP_DIR_STUBSSelect Warren 1984, Warren 2008, or Picard 2016 ice refractive indices
Surface reflectance fileSFCFresnel reflectance data for the ice–air interface
RT approximationAPRX_TYPTwo-stream approximation variant
CDOMcdomColoured dissolved organic matter absorption toggle
Liquid water coatingwaterWater coating around snow grains

Adding custom impurity types

  1. Obtain an optical property .npz file (containing MAC, SSA, asymmetry parameter arrays)
  2. Add it to the LAP archive (data/OP_data/480band/lap.npz)
  3. Add an entry to inputs.yaml:
    IMPURITIES:
      my_new_impurity:
        FILE: "my_impurity_file.npz"
        COATED: False
        UNIT: 0          # 0 = ppb (mass), 1 = cells/mL (count)
        CONC: [0, 0]     # default concentration per layer
  4. Use the YAML key as the parameter name: run_model(my_new_impurity=500)

See the in-line annotations in inputs.yaml for valid values and guidance.