The Factorial Snow Model (FSM) is a multi-physics energy balance model of accumulation and melt of snow on the ground. The model includes 5 parameterizations that can be switched on or off independently, giving 32 possible model configurations identified by decimal numbers between 0 and 31. The corresponding 5 digit binary number nancndnenw has digits na for prognostic snow albedo, nc for variable thermal conductivity, nd for prognostic snow density, ne for stability adjustment of the turbulent exchange coefficient and nw for prognostic liquid water content; the digits are 0 if a parametrization is switched off and 1 if it is switched on. FSM uses a four-layer soil model extending to 1.5 m depth and one snow layer for snow depths up to 0.2 m, two layers for depths up to 0.5 m or three layers for greater depths. A full description is given by Essery (2015).
FSM is coded in Fortran. A linux executable FSM
or a Windows executable FSM.exe
is produced by running the script compil.sh
or the batch file compil.bat
. Both use the gfortran compiler but could be edited to use other compilers. The bin
directory holds precompiled executables.
FSM requires meteorological driving data and namelists to set options and parameters. The model is run with the command
./FSM < nlst.txt
or
FSM.exe < nlst.txt
where nlst.txt
is a text file containing five namelists described below; nlst_CdP_0506.txt
gives an example to run FSM for the winter of 2005-2006 at Col de Porte (Morin et al. 2011). All of the namelists have to be present in the same order as in the example, but any or all of the namelist variables listed in the tables below can be omitted; defaults are then used.
The executable runs a single configuration of FSM, but a Python script is provided to run an ensemble of simulations. For example,
python FSMens.py nlst_CdP_0506.txt
will run all configurations of FSM for Col de Porte and write output files tagged with the binary configuration numbers to directory output
.
Meteorological driving data are read from a text file named in namelist &drive
. A driving data file has 12 columns containing the variables listed in the table below. Each row of the file corresponds with a timestep. Driving data for the Col de Porte example are given in file data/met_CdP_0506.txt
.
Variable | Units | Description |
---|---|---|
year | years | Year |
month | months | Month of the year |
day | days | Day of the month |
hour | hours | Hour of the day |
SW | W m-2 | Incoming shortwave radiation |
LW | W m-2 | Incoming longwave radiation |
Sf | kg m-2 s-1 | Snowfall rate |
Rf | kg m-2 s-1 | Rainfall rate |
Ta | K | Air temperature |
RH | RH | Relative humidity |
Ua | m s-1 | Wind speed |
Ps | Pa | Surface air pressure |
&config
Variable | Range | Default | Description |
---|---|---|---|
nconfig | 0 - 31 | 31 | Configuration number |
&drive
Variable | Default | Units | Description |
---|---|---|---|
met_file | 'met.txt' | string | Driving file name |
dt | 3600 | s | Time step |
zT | 2 | m | Temperature measurement height |
zU | 10 | m | Wind speed measurement height |
zvar | .TRUE. | logical | Subtract snow depth from measurement height? |
Switch zvar
is provided because the temperature and relative humidity sensors at Col de Porte are moved during site visits to maintain a constant height above the snow surface (zvar = .FALSE.
). This will not be the case at sites that are not regularly attended.
¶ms
Variable | Default | Units | Description |
---|---|---|---|
alb0 | 0.2 | - | Snow-free ground albedo |
asmx | 0.8 | - | Maximum albedo for fresh snow |
asmn | 0.5 | - | Minimum albedo for melting snow |
bstb | 5 | - | Atmospheric stability adjustment parameter (if ne=1) |
bthr | 2 | - | Thermal conductivity exponent (if nc=1) |
fcly | 0.3 | - | Soil clay fraction |
fsnd | 0.6 | - | Soil sand fraction |
gsat | 0.01 | m s-1 | Surface conductance for saturated soil |
hfsn | 0.1 | m | Snow cover fraction depth scale |
kfix | 0.24 | W m-1 K-1 | Fixed thermal conductivity (if nc=0) |
rho0 | 300 | kg m-3 | Fixed snow density (if nd=0) |
rhof | 100 | kg m-3 | Fresh snow density (if nd=1) |
rcld | 300 | kg m-3 | Maximum density for cold snow (if nd=1) |
rmlt | 500 | kg m-3 | Maximum density for melting snow (if nd=1) |
Salb | 10 | kg m-2 | Snowfall to refresh albedo (if na=1) |
Talb | -2 | °C | Albedo decay temperature threshold (if na=0) |
tcld | 1000 | h | Cold snow albedo decay timescale (if na=1) |
tmlt | 100 | h | Melting snow albedo decay timescale (if na=1) |
trho | 200 | h | Compaction time scale (if nd=1) |
Wirr | 0.03 | - | Irreducible liquid water content (if nw=1) |
z0sf | 0.1 | m | Snow-free roughness length |
z0sn | 0.01 | m | Snow roughness length |
&initial
Variable | Default | Units | Description |
---|---|---|---|
start_file | 'none' | string | Start file |
fsat | 4 * 0.5 | - | Initial moisture content of soil layers as fractions of saturation |
Tsoil | 4 * 285 | K | Initial temperatures of soil layers |
Soil temperature and moisture content are taken from the namelist and FSM is initialized in a snow-free state by default. If a start file is named, it should be a text file containing initial values for each of the state variables in order:
Variable | Units | Description |
---|---|---|
albs | - | Snow albedo |
Ds(1:3) | m | Snow layer thicknesses |
Nsnow | - | Number of snow layers |
Sice(1:3) | kg m-2 | Ice content of snow layers |
Sliq(1:3) | kg m-2 | Liquid content of snow layers |
theta(1:4) | - | Volumetric moisture content of soil layers |
Tsnow(1:3) | K | Snow layer temperatures |
Tsoil(1:4) | K | Soil layer temperatures |
Tsurf | K | Surface skin temperature |
Snow and soil layers are numbered from the top downwards. File data/dump.txt
is an example of a dump file produced at the end of a run which could be used to restart the model.
&outputs
Variable | Default | Description |
---|---|---|
Nave | 24 | Number of timesteps in averaged outputs |
out_file | 'out.txt' | Output file name |
dump_file | 'dump.txt' | Dump file name |
At present a simple fixed output format is used. The output text file has 10 columns:
Variable | Units | Description |
---|---|---|
year | years | Year |
month | months | Month of the year |
day | days | Day of the month |
hour | hours | Hour of the day |
alb | - | Effective albedo |
Rof | kg m-2 | Cumulated runoff from snow |
snd | m | Average snow depth |
SWE | kg m-2 | Average snow water equivalent |
Tsf | °C | Average surface temperature |
Tsl | °C | Average soil temperature at 20 cm depth |
Example file data/out_CdP_0506.txt
contains output from a run of FSM configuration 31; data/obs_CdP_0506.txt
contains daily observations of the same variables, with -99 indicating missing data.
At the end of a run, the state variables are written to a dump file with the same format as the start file.
Configuration | na | nc | nd | ne | nw |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 1 |
2 | 0 | 0 | 0 | 1 | 0 |
3 | 0 | 0 | 0 | 1 | 1 |
4 | 0 | 0 | 1 | 0 | 0 |
5 | 0 | 0 | 1 | 0 | 1 |
6 | 0 | 0 | 1 | 1 | 0 |
7 | 0 | 0 | 1 | 1 | 1 |
8 | 0 | 1 | 0 | 0 | 0 |
9 | 0 | 1 | 0 | 0 | 1 |
10 | 0 | 1 | 0 | 1 | 0 |
11 | 0 | 1 | 0 | 1 | 1 |
12 | 0 | 1 | 1 | 0 | 0 |
13 | 0 | 1 | 1 | 0 | 1 |
14 | 0 | 1 | 1 | 1 | 0 |
15 | 0 | 1 | 1 | 1 | 1 |
16 | 1 | 0 | 0 | 0 | 0 |
17 | 1 | 0 | 0 | 0 | 1 |
18 | 1 | 0 | 0 | 1 | 0 |
19 | 1 | 0 | 0 | 1 | 1 |
20 | 1 | 0 | 1 | 0 | 0 |
21 | 1 | 0 | 1 | 0 | 1 |
22 | 1 | 0 | 1 | 1 | 0 |
23 | 1 | 0 | 1 | 1 | 1 |
24 | 1 | 1 | 0 | 0 | 0 |
25 | 1 | 1 | 0 | 0 | 1 |
26 | 1 | 1 | 0 | 1 | 0 |
27 | 1 | 1 | 0 | 1 | 1 |
28 | 1 | 1 | 1 | 0 | 0 |
29 | 1 | 1 | 1 | 0 | 1 |
30 | 1 | 1 | 1 | 1 | 0 |
31 | 1 | 1 | 1 | 1 | 1 |
Essery (2015). A Factorial Snowpack Model (FSM 1.0). Geoscientific Model Development, 8, 3867-3876, doi:10.5194/gmd-8-3867-2015
Morin et al. (2012). A 18-yr long (1993-2011) snow and meteorological dataset from a mid-altitude mountain site (Col de Porte, France, 1325 m alt.) for driving and evaluating snowpack models. Earth System Science Data, 4(1), 13-21, doi:10.5194/essd-4-13-2012