Input Parameters
BioSNICAR is configured through run_model() keyword arguments or the inputs.yaml file. This page documents every parameter.
Illumination
| Parameter | Key | Type | Default | Description |
|---|---|---|---|---|
| Solar zenith angle | solzen | int | 50 | Degrees from vertical (1–89). Higher = more oblique. |
| Direct/diffuse | direct | int | 1 | 1 = clear sky (direct beam), 0 = overcast (diffuse). |
| Incoming spectrum | incoming | int | 0 | Index 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
| Parameter | Key | Type | Default | Description |
|---|---|---|---|---|
| Layer type | layer_type | int or list | 0 | 0 = granular snow, 1 = solid ice with Fresnel, 3 = solid ice without Fresnel |
| Layer thickness | dz | list[float] | [0.02, 0.146] | Thickness of each layer in metres |
| Grain/bubble radius | rds | int or list | 500 | Effective radius in µm |
| Density | rho | int or list | 400 | Bulk density in kg/m³ |
| Grain shape | shp | int or list | 0 | 0=sphere, 1=spheroid, 2=hex plate, 3=Koch snowflake, 4=hex prism |
| Grain aspect ratio | grain_ar | float or list | 1.0 | Aspect ratio for non-spherical grains |
| Liquid water content | lwc | float or list | 0.0 | Fractional liquid water content |
| Hex side length | hex_side | float or list | 50 | Side length for hexagonal prism grains (µm) |
| Hex length | hex_length | float or list | 100 | Length 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
| Parameter | Key | Type | Unit | Description |
|---|---|---|---|---|
| Black carbon | black_carbon | float or list | ppb | Soot from combustion |
| Snow algae | snow_algae | float or list | cells/mL | Sphaerocystis-type algae |
| Glacier algae | glacier_algae | float or list | cells/mL | Ancylonema-type filamentous algae |
| Mineral dust | dust | float or list | ppb | Mineral 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")| Parameter | Location | Description |
|---|---|---|
| Refractive index variant | OP_DIR_STUBS | Select Warren 1984, Warren 2008, or Picard 2016 ice refractive indices |
| Surface reflectance file | SFC | Fresnel reflectance data for the ice–air interface |
| RT approximation | APRX_TYP | Two-stream approximation variant |
| CDOM | cdom | Coloured dissolved organic matter absorption toggle |
| Liquid water coating | water | Water coating around snow grains |
Adding custom impurity types
- Obtain an optical property
.npzfile (containing MAC, SSA, asymmetry parameter arrays) - Add it to the LAP archive (
data/OP_data/480band/lap.npz) - 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 - 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.