GLM

Configuration reference

A GLM simulation is configured via the main “namelist” (nml) text file called glm3.nml or glm4.nml. Each block of configuration options and parameters is summarised below. For a summary of the notation and nomenclature refer to the 2019 GMD paper.

For working examples, visit glm-examples.

Model Configuration

&glm_setup

The first block IS compulsory, with the following variables that may be set :

Variable Name Symbol Description Type Units Options Default
sim_name Title of simulation [string] 'lake'
max_layers $$N_{MAX}$$ Maximum number of layers [integer] - 500
min_layer_vol $$\Delta V_{min}$$ Minimum layer volume [real] $$m^3$$
min_layer_thick $$\Delta z_{min}$$ Minimum thickness of a layer (m) [real] $$m$$
max_layer_thick $$\Delta z_{max}$$ Maximum thickness of a layer (m) [real] $$m$$
density_model $$\Theta_{\rho}$$ Switch to set the density equation [integer] - $$\rho[T,S] \longleftarrow \left\{ \begin{array}{ll} \textrm{UNESCO(1981): }&\Theta_{\rho}=0 \\ \textrm{TEOS-10: }&\Theta_{\rho}=1 \end{array} \right.$$ 0
non_avg $$\Theta_{bc}$$ Switch to configure flow boundary condition temporal interpolation [boolean] - $$Q_{inf}^{t} = \left\{ \begin{array}{ll} Q_{inf}^{t} & \Theta_{bc}=T \\ (Q_{inf}^{t}+Q_{inf}^{t-1})/2 & \Theta_{bc}=F \end{array} \right.$$ .false.
Example
&glm_setup
			   sim_name = 'Example Simulation #1'
			   max_layers = 500
			   min_layer_thick = 0.15
			   max_layer_thick = 1.50
			   min_layer_vol = 0.025
			   density_model = 1
			   non_avg = .true.
			/

&mixing

This configuration block is NOT compulsory

Variable Name Symbol Description Type Options Default
surface_mixing $$\Theta_{mix}$$ Switch to select the options of the surface mixing model [integer] $$ \left\{ \begin{array}{ll} \textrm{No surface mixing }&\Theta_{mix}=0 \\ \textrm{xxxxx }&\Theta_{mix}=1\\ \textrm{xxxxx }&\Theta_{mix}=2 \end{array} \right.$$ 1
coef_mix_conv $$C_{K}$$ Mixing efficiency - convective overturn [real]
coef_wind_stir $$C_{W}$$ Mixing efficiency - wind stirring [real]
coef_mix_shear $$C_{S}$$ Mixing efficiency - shear production [real]
coef_mix_turb $$C_{T}$$ Mixing efficiency - unsteady turbulence effects [real]
coef_mix_KH $$C_{KH}$$ Mixing efficiency - Kelvin-Helmholtz billowing [real]
deep_mixing $$\Theta_{deep}$$ Switch to select the options of the deep (hypolimnetic) mixing model [integer] $$ \left\{ \begin{array}{ll} \textrm{No deep mixing: }D_z=0&\Theta_{deep}=0 \\ \textrm{Constant diffusivity: }D_z=C_{HYP}&\Theta_{deep}=1\\ \textrm{Weinstock model: }D_z=f(N^2,C_{HYP},...)&\Theta_{deep}=2 \end{array} \right.$$ ?
coef_mix_hyp $$C_{HYP}$$ Mixing efficiency - hypolimnetic turbulence [real]
diff $$D_{\epsilon}$$ Background (molecular) diffusivity in the hypolimnion [real]
Example
&mixing
			  surface_mixing = 1
			  coef_mix_conv  = 0.125
			  coef_wind_stir = 0.23
			  coef_mix_shear = 0.2
			  coef_mix_turb  = 0.51
			  coef_mix_KH    = 0.3
			  deep_mixing    = 2
			  coef_mix_hyp   = 0.5
			  diff = 0.
			/

&wq_setup

This configuration block is NOT compulsory

Variable Name Symbol Description Type Options Default
wq_lib $$\Theta_{wq}$$ Water quality model selection [string] $$ \left\{ \begin{array}{ll} \textrm{FABM} & \Theta_{wq}=\textrm{'FABM'} \\ \textrm{AED2} & \Theta_{wq}=\textrm{'AED2'} \\ \end{array} \right.$$ AED2
wq_nml_file Filename of WQ configuration file [string] add filename in quotes, can include directorys './aed2.nml'
bioshade_feedback $$\Theta_{kw}$$ Switch to enable \(K_{w}\) to be updated by the WQ model [boolean] $$K_{w}[t,z] = \left\{ \begin{array}{ll} K_{w} & \Theta_{kw}=F \\ K_{w}+K_{ss}+K_{dom}+K_{pom}+K_{phy} & \Theta_{kw}=T \\ \end{array} \right.$$ ?
mobility_off Switch to enable settling within the WQ model [boolean] .true. & .false. .false.
ode_method $$\Theta_{ode}$$ Method to use for ODE solution of water quality module [integer] tbc 1
split_factor Factor weighting implicit vs explicit numerical solution of the WQ model [real] 0-1 1
repair_state $$\Theta_{repair}$$ Switch to correct negative or out of range WQ variables [boolean] .true. or .false. .true.
Example
&wq_setup
			   wq_lib = 'aed2'
			   wq_nml_file = 'aed2/aed2.nml'
			   ode_method = 1
			   split_factor = 1
			   bioshade_feedback = .true.
			   repair_state = .true.
			   mobility_off = .false.
			/

&morphometry

This configuration block IS compulsory

Variable Name Symbol Description Type Units Options/Comment Default
lake_name Site name [string] - - -
latitude $$Lat$$ Latitude, positive North [real] $$^{\circ} N$$ 0
longitude $$Long$$ Longitude, positive East [real] $$^{\circ} E$$ 0
base_elev $$H_{0}$$ Elevation of the bottom-most point of the lake. Deprecated — the value is read but no longer used; \(H[1]\) is assumed instead. GLM prints a note if it is set [real] \(m\) above datum - -
crest_elev $$H_{crest}$$ Elevation of a weir crest, where overflow begins [real] \(m\) above datum
bsn_len $$L_{crest}$$ Length of the lake basin, at crest height [real] $$m$$
bsn_wid $$W_{crest}$$ Width of the lake basin, at crest height [real] $$m$$
bsn_vals $$N_{BSN}$$ Number of points being provided to described the hyposgraphic details [real] -
H $$H[b]$$ Comma-separated list of lake elevations [array] \(m\) above datum
A $$A[b]$$ Comma-separated list of lake areas [array] $$m^2$$
Example
&morphometry
				   lake_name  = 'Example Lake'
				   latitude   =  32
				   longitude  =  35
				   base_elev  = -252.9
				   crest_elev = -203.9
				   bsn_len    =  21000
				   bsn_wid    =  13000
				   bsn_vals   =  45
				   !   H(m) & A(m2), both have length bsn_vals
				   H = -252.9,  -251.9,  -250.9,  -249.9,  -248.9,  -247.9,  -246.9,  -245.9,
					   -244.9,  -243.9,  -242.9,  -241.9,  -240.9,  -239.9,  -238.9,
					   -237.9,  -236.9,  -235.9,  -234.9,  -233.9,  -232.9,  -231.9,
					   -230.9,  -229.9,  -228.9,  -227.9,  -226.9,  -225.9,  -224.9,
					   -223.9,  -222.9,  -221.9,  -220.9,  -219.9,  -218.9,  -217.9,
					   -216.9,  -215.9,  -214.9,  -213.9,  -212.9,  -211.9,  -208.9,
					   -207.9,  -203.9
				   A = 0,  9250000,  15200000,  17875000,  21975000,  26625000,  31700000,  33950000,
					   38250000,   41100000,   46800000,  51675000,  55725000,  60200000,  64675000,
					   69600000,   74475000,   79850000,  85400000,  90975000,  96400000,  102000000,
					   107000000,  113000000,  118000000,  123000000,  128000000,  132000000,  136000000,
					   139000000,  143000000,  146000000,  148000000,  150000000,  151000000,  153000000,
					   155000000,  157000000,  158000000,  160000000,  161000000,  162000000,  167000000,
					   170000000,  173000000

				/

&time

This configuration block IS compulsory

Variable Name Symbol Description Type Options Default
timefmt $$\Theta_{time}$$ Time configuration switch [Integer] $$ \left\{ \begin{array}{ll} t = t_{0} ... t_{N_{\Delta t}};\ N_d = t_{N_{\Delta t}} - t_{0} & \Theta_{time}=2 \\ t = t_{0} ... (t_{0}+N_d);\ t_{N_{\Delta t}} = t_{0}+N_d & \Theta_{time}=3 \\ \end{array} \right.$$ ?
start $$t_{0}$$ Start time/date of simulation [string, format = "yyyy-mm-dd hh:mm:ss"] Required -
stop $$t_{N_{\Delta t}}$$ End time/date of simulation [string, format = "yyyy-mm-dd hh:mm:ss"] Used when (\(\Theta_{time}=2\)) -
dt $$\Delta t$$ Time step (\(sec\)) [real] Required 3600
num_days $$N_d$$ Number of days to simulate [integer] Used when (\(\Theta_{time}=3\)) -
timezone $$TZ$$ UTC time zone [real] +0
Example
&time
				   timefmt  = 3                       ! Choose 2 (start/stop) or 3 (num_days)
				   start    = '1997-01-01 00:00:00'
				   stop     = '1999-01-01 00:00:00'
				   dt       = 3600.0
				   num_days = 730
				  !timezone = 7.0
				/

&output

This configuration block is NOT compulsory

Variable Name Description Type Options Default
out_dir Directory to write the output files [string] ./
out_fn Filename of the main NetCDF output file [string] output
nsave Frequency to write to the NetCDF and CSV point files [integer] 1
csv_lake_fname Filename for the daily summary file [string] lake
csv_point_nlevs Number of specific level/depth csv files to be created [real] 0
csv_point_fname Name to be appended to specified depth CSV files [string] 'WQ_'
csv_point_frombot Comma separated list identify whether each output point listed in csv_point_at is relative to the bottom (ie heights) or the surface (ie depths) [real] .true.
csv_point_at Height or Depth of points to output at (comma separated list) [real] 0
csv_point_nvars Number of variables to output into the csv files [integer]
csv_point_vars Comma separated list of variable names [string] temp; salt; ...
csv_outlet_allinone Switch to create an optional outlet file combining all outlets [boolean] .true. & .false. .false.
csv_outlet_fname Name to be appended to each of the outlet CSV files [string]
csv_outlet_nvars Number of variables to be written into the outlet file(s) [integer] 0
csv_outlet_vars Comma separated list of variable names to be included in the output file(s) [string]
csv_ovrflw_fname Filename to be used for recording the overflow details [string]
Example
&output
				   out_dir = 'output'
				   out_fn  = 'output'
				   nsave = 6
				  !-- General summary file
				   csv_lake_fname = 'lake'
				  !-- Depth specific outputs
				   csv_point_nlevs = 2
				   csv_point_fname = 'WQ_'
				   csv_point_at    = 5,30    ! a file will be produced for 5m and 30m heights from bottom
				   csv_point_nvars = 7
				   csv_point_vars  = 'temp',
						     'salt',
							'OXY_oxy',
							 'SIL_rsi',
							 'NIT_amm',
							 'NIT_nit',
							 'PHS_frp'
				  !-- Combined outlet file & overflow
				   csv_outlet_allinone = .false.
				   csv_outlet_fname = 'outlet_'
				   csv_outlet_nvars = 4
				   csv_outlet_vars = 'flow',
				                     'temp',
				                     'salt',
				                     'OXY_oxy',
				   csv_ovrflw_fname = "overflow"
				/

&init_profiles

This configuration block IS compulsory

Variable Name Symbol Description Type Options Default
lake_depth $$h_S[t=0]$$ Initial lake height/depth (m) [real]
num_depths Number of depths provided for initial profiles [integer]
the_depths The depths of the initial profile points (m) as a comma-separated list [real]
the_temps $$T[t=0,z]$$ The temperature (C) at each of the initial profile points (comma-separated list) [real]
the_sals $$S[t=0,z]$$ The salinity (ppt) at each of the initial profile points (comma-separated list) [real]
num_wq_vars Number of non GLM (ie FABM or AED2) variables to be initialised [integer] Note these values override initialisations done by FABM or AED2 0
wq_names Names of non GLM (ie FABM or AED2) variables to be initialised (comma-separated list) [string] -
wq_init_vals $$C[t=0,z,\mathbb{C}]$$ Array of WQ variable initial data (rows = vars; cols = depths) [real] 0
Example
&init_profiles
					lake_depth  = 43
					num_depths  = 3
					the_depths  = 1,    20,   40
				   !-- GLM
					the_temps   = 18.0, 18.0, 18.0
					the_sals    =  0.5,  0.5,  0.5
				   !-- WQ
					num_wq_vars = 6
					wq_names    =  'OGM_don',
							'OGM_pon',
							'OGM_dop',
							'OGM_pop',
							'OGM_doc',
							'OGM_poc'
					wq_init_vals =  1.1, 1.2, 1.3, 1.2, 1.3,
							2.1, 2.2, 2.3, 1.2, 1.3,
							3.1, 3.2, 3.3, 1.2, 1.3,
							4.1, 4.2, 4.3, 1.2, 1.3,
							5.1, 5.2, 5.3, 1.2, 1.3,
							6.1, 6.2, 6.3, 1.2, 1.3
				/

&light

This configuration block is NOT compulsory

Variable Name Symbol Description Type Options Default
light_mode $$\Theta_{light}$$ Switch to configure the approach to light penetration [integer] 1
Kw $$K_w$$ Light extinction coefficient (\(m^{-1}\)) [real] Used when \(\Theta_{light}=0\)
Kw_file - Name of file with Kw time-series included [string] -
n_bands $$N_{SW}$$ Number of light bandwidths to simulate [integer] Used when \(\Theta_{light}=1\) 2
light_extc $$K_w_l$$ Comma-separated list of light extinction coefficients for each waveband [real]
energy_frac $$f_l$$ Comma-separated list of energy fraction captured by each waveband [real]
Benthic_Imin $$f_{BEN}_{crit}$$ Critical fraction of incident light reaching the benthos [real]
Example
&light
				   light_mode = 0
				   Kw = 0.57
				   n_bands = 4
				   light_extc = 1.0, 0.5, 2.0, 4.0
				   energy_frac = 0.51, 0.45, 0.035, 0.005
				   Benthic_Imin = 10
				/

&bird_model

This configuration block is NOT compulsory

Variable Name Symbol Description Type Options Default
AP $$p$$ Atmospheric pressure (hPa) [real]
Oz $$Oz$$ Ozone concentration (atm-cm) [real]
WatVap $$W$$ Total Precipitable water vapor (atm-cm) [real]
AOD500 $$AOD_{500}$$ Dimensionless Aerosol Optical Depth at wavelength 500 nm [real]
AOD380 $$AOD_{380}$$ Dimensionless Aerosol Optical Depth at wavelength 380 nm [real]
Albedo $$\alpha_{SW}$$ Albedo of the surface used for Bird Model insolation calculation [real] 0.2
Example
&bird_model
					  AP     = 973
					  Oz     = 0.279
					  WatVap = 1.1
					  AOD500 = 0.033
					  AOD380 = 0.038
					  Albedo = 0.2
				/

&sediment

This configuration block is NOT compulsory

Variable Name Symbol Description Type Options Default
sed_heat_Ksoil $$K_{soil}$$ heat conductivity of soil/sediment [real] -
sed_temp_depth $$\delta z_{soil}$$ Depth of soil/sediment layer below the lake bottom, used for heat flux calculation [real]
sed_temp_mean $$T_{z_{mean}}$$ Annual mean sediment temperature [real] comma-separated list if \(N_{SZ}>1\)
sed_temp_amplitude $$\delta T_z$$ Amplitude of temperature variation experienced in the sediment over one year [real] comma-separated list if \(N_{SZ}>1\)
sed_temp_peak_doy $$d_{T_{z}}$$ Day of the year where the sediment temperature peaks [integer] comma-separated list if \(N_{SZ}>1\)
benthic_mode $$\Theta_{benthic}$$ Switch to configure which mode of benthic interaction to apply [integer] $$ \left\{ \begin{array}{ll} \textrm{Bottom layer only } & \Theta_{benthic}=0 \\ \textrm{Bottom layer & layer flanks } & \Theta_{benthic}=1 \\ \textrm{Sediment zones } & \Theta_{benthic}=2 \\ \textrm{tbc} & \Theta_{benthic}=3 \end{array} \right.$$
n_zones $$N_{SZ}$$ Number of sediment zones to simulate [integer] Required for benthic_mode (\(\Theta_{benthic}\)) \(= 2\) or \(3\) 0
zone_heights $$h_z[1 ... N_{SZ}]$$ Upper height of zone boundary [real] Required for benthic_mode (\(\Theta_{benthic}\)) \(= 2\) or \(3\)
sed_reflectivity $$\alpha_{sed}$$ Sediment reflectivity [real] 0
sed_roughness $$d_{SS_{z}}$$ TBC [real]
Example
&sediment
				  sed_heat_Ksoil = 0.0
				  sed_temp_depth = 0.2
				  sed_temp_mean = 5,10,20
				  sed_temp_amplitude = 6,8,10
				  sed_temp_peak_doy = 80, 70, 60
				  benthic_mode = 1
				  n_zones = 3
				  zone_heights = 10., 20., 50.
				  sed_reflectivity = 0.1, 0.01, 0.01
				  sed_roughness = 0.1, 0.01, 0.01

				/

&snowice

This configuration block is NOT compulsory

Variable Name Symbol Description Type Options Default
snow_albedo_factor $$f_{\alpha}$$ Scaling factor used to as a multiplier to scale the snow/ice albedo estimate [real] 1
snow_rho_min $$\rho_{s,min}$$ Minimum snow density allowable (\(kg\ m^{-3}\)) [real] 50
snow_rho_max $$\rho_{s,max}$$ Maximum snow density allowable (\(kg\ m^{-3}\)) [real] 300
Example
&snowice
				   snow_albedo_factor = 1.0
				   snow_rho_min       = 50
				   snow_rho_max       = 300
				/

&particles

Configures the Particle Tracking Model (PTM), which advects Lagrangian particles through the layer structure. This block is optional; if it is absent GLM reports “No 'particles' config, assuming no particles” and continues. Particles are only stepped when ptm_sw is .true.

Variable Name Symbol Description Type Options Default
ptm_sw $$\Theta_{ptm}$$ Switch to enable the particle tracking model [boolean] .true. OR .false. .false.
num_particle_grp $$N_{grp}$$ Number of particle groups. Accepted by the reader; planned for future update — the group count applied internally is fixed at 1 [integer] - 1
max_particle_num $$N_{max}$$ Maximum number of particles that may exist at any one time. This sizes the particle arrays, so raising it raises the memory footprint [integer] \(\le 10000\) 10000
init_particle_num $$N_{init}$$ Number of particles seeded at the start of the simulation [integer] \(\le\) max_particle_num 10
init_depth_min $$z_{min}$$ Shallowest depth of the band the initial particles are seeded into, measured down from the water surface (\(m\)) [real] - 0.0
init_depth_max $$z_{max}$$ Deepest depth of the band the initial particles are seeded into, measured down from the water surface (\(m\)) [real] \(>\) init_depth_min 2.0
inflow_conc $$C_{ptm}[1...N_{inflow}]$$ Particle concentration carried by each inflow (\(\#\;m^{-3}\)). One value per inflow, in the order the inflows are declared in &inflow [array] comma-separated list 0
ptm_diffusivity $$K_{ptm}$$ Floor applied to the vertical diffusivity used in the particle random walk (\(m^{2}\,s^{-1}\)). Where the resolved \(K_z\) falls below this value, this value is used instead [real] - 1e-6
ptm_time_step $$\Delta t_{ptm}$$ Sub time step for particle motion. Accepted by the reader; planned for future update. Note the source initialiser is written 1/60, which is integer division in C and therefore evaluates to \(0\), not one minute [real] - 0
particle_density $$\rho_{p}$$ Density assigned to each particle (\(kg\;m^{-3}\)), used in the settling calculation [real] - 1000.0
particle_diameter $$d_{p}$$ Diameter assigned to each particle (\(m\)), used in the settling calculation [real] - 1e-6
settling_velocity $$v_{s}$$ Prescribed particle settling velocity (\(m\;s^{-1}\)). Negative values sink [real] - 0.0
settling_efficiency $$\eta_{s}$$ Scales the probability that a particle reaching the bottom layer is retained by the sediment. \(1\) retains every particle that arrives [real] \(0 \le \eta_{s} \le 1\) 1.0
sed_deactivation $$\Theta_{sed_{ptm}}$$ Switch to deactivate particles once they settle to the sediment, rather than leaving them available for resuspension [boolean] .true. OR .false. .false.
do_particle_bgc $$\Theta_{bgc_{ptm}}$$ Switch to enable particle-attached biogeochemistry. The flag is passed through to AED, so it only has an effect when a water quality model is active [boolean] .true. OR .false. .false.
Example
&particles
   ptm_sw            = .true.
   max_particle_num  = 10000
   init_particle_num = 1000
   init_depth_min    = 0.0
   init_depth_max    = 2.0
   ptm_diffusivity   = 1e-6
   particle_density  = 1000.0
   particle_diameter = 1e-6
   settling_velocity = 0.0
/

Model Boundary Conditions

&meteorology

This configuration block is NOT compulsory

Variable Name Symbol Description Type Options Default
met_sw $$\Theta_{met}$$ Switch to enable the surface heating module [boolean] .true. OR .false. .false.
Input meterological data
meteo_fl - Filename of the meterological file [string] Include path and filename -
subdaily $$\Theta_{subdaily}$$ Switch to indicate the meteorological data is provided with sub-daily resolution, at an interval equivalent to \(\Delta t\) [boolean] .true. OR .false.
time_fmt - Time format of the 1st column in the inflow_fl [string] 'YYYY-MM-DD hh:mm:ss'
SW & LW radiation
rad_mode $$\Theta_{rad}$$ Switch to configure which incoming radiation option to use [integer] $$ \left\{ \begin{array}{ll} \textrm{1 } & \Theta_{rad}=1 \\ \textrm{1 } & \Theta_{rad}=2 \\ \textrm{1 } & \Theta_{rad}=3 \\ \textrm{1 } & \Theta_{rad}=4 \\ \textrm{1 } & \Theta_{rad}=5 \end{array} \right.$$
albedo_mode $$\Theta_{\alpha}$$ Switch to configure which albedo calculation option is used [integer] $$ \left\{ \begin{array}{ll} \textrm{Hamilton & Schladow } & \Theta_{\alpha}=1 \\ \textrm{Briegleb et al } & \Theta_{\alpha}=2 \\ \textrm{Yajima & Yamamoto } & \Theta_{\alpha}=3 \end{array} \right.$$
sw_factor $$f_{SW}$$ Scaling factor to adjust the shortwave radiation data provided in the meteo_fl (\(\phi_{SW_x}\)) [real] 1
lw_type $$\Theta_{lw}$$ Switch to configure which input approach is being used for longwave/cloud data in the meteo_fl [string] $$ \left\{ \begin{array}{ll} \textrm{Incident longwave } & \Theta_{lw}=\textrm{'LW_IN'} \\ \textrm{Net longwave } & \Theta_{lw}=\textrm{'LW_NET'} \\ \textrm{Cloud cover} & \Theta_{lw}=\textrm{'LW_CC'} \end{array} \right.$$
cloud_mode $$\Theta_{cloud}$$ Switch to configure which atmospheric emmissivity calculation option is used [integer] $$ \left\{ \begin{array}{ll} \textrm{Idso and Jackson } & \Theta_{cloud}=1 \\ \textrm{Swinbank } & \Theta_{cloud}=2 \\ \textrm{Brutsaert } & \Theta_{cloud}=3 \\ \textrm{Yajima & Yamamoto} & \Theta_{cloud}=4 \end{array} \right.$$
lw_factor $$f_{LW}$$ Scaling factor to adjust the longwave (or cloud) data provided in the meteo_fl (\(C_x\)) [real] 1
Sensible & latent heat
atm_stab $$\Theta_{atmstab}$$ Switch to configure which approach to atmospheric stability is used [integer] $$ \left\{ \begin{array}{ll} \textrm{Neutral conditions } & \Theta_{atmstab}=0 \\ \textrm{1 } & \Theta_{atmstab}=1 \\ \textrm{1 } & \Theta_{atmstab}=2 \end{array} \right.$$
rh_factor $$f_{RH}$$ Scaling factor to adjust the relative humidity data provided in the meteo_fl (\(RH_x\)) [real] 1
at_factor $$f_{AT}$$ Scaling factor to adjust the air temperature data provided in the meteo_fl (\(AT_x\)) [real] 1
ce $$C_E$$ Bulk aerodynamic transfer coefficient for latent heat flux [real] 0.0013
ch $$C_H$$ Bulk aerodynamic transfer coefficient for sensible heat flux [real] 0.0013
Rainfall & local runoff ("run-in")
rain_sw $$\Theta_{rain}$$ Switch to configure rainfall input concentrations [boolean] .true. OR .false.
rain_factor $$f_R$$ Scaling factor to adjust the rainfall data provided in the meteo_fl (\(R_x\)) [real] 1
catchrain $$\Theta_{runin}$$ Switch that configures runoff from exposed banks of lake area [boolean] .true. OR .false. .false.
rain_threshold $$R_L$$ Daily rainfall amount (m) required before runoff from exposed banks occurs [real]
runoff_coef $$f_{ro}$$ Conversion fraction of infiltration excess rainfall to runoff in exposed lake banks [real]
Wind & wind-sheltering
cd $$C_D$$ Bulk aerodynamic transfer coefficient for momentum [real] 0.0013
wind_factor $$f_U$$ Scaling factor to adjust the windspeed data provided in the meteo_fl (\(U_x\)) [real] 1
fetch_mode $$\Theta_{fetch}$$ Switch to configure which wind-sheltering/fetch option to use. Modes 2 and 3 read a wind-direction column from the meteo_fl and require the &fetch block [integer] $$ \left\{ \begin{array}{ll} \textrm{No sheltering } & \Theta_{fetch}=0 \\ \textrm{Area-based scaling } & \Theta_{fetch}=1 \\ \textrm{Markfort length-scale } & \Theta_{fetch}=2 \\ \textrm{User input scaling table } & \Theta_{fetch}=3 \end{array} \right.$$ 0
Aws $$A_{WS}$$ Area scale controlling the effective-area sheltering relationship, \(A_{eff} = A\tanh(A/A_{WS})\) [real] Required for fetch_mode (\(\Theta_{fetch}\)) \(= 1\) 0
Xws $$x_{WS}$$ Accepted by the reader; planned for future update and not yet applied by any fetch_mode. Modes 2 and 3 take their sheltering from the &fetch block [real] - 0
Fws $$f_{WS}$$ Accepted by the reader; planned for future update and not yet applied by any fetch_mode [string] - -
Example
&meteorology
				  !-- Met forcing options
				   met_sw      = .true.
				   lw_type     = 'LW_IN'
				   rain_sw     = .false.
				   atm_stab    = 0
				   fetch_mode  = 0
				   !rad_mode    = 1
				   albedo_mode = 1
				   cloud_mode  = 4
				  !-- BC file details
				   subdaily    = .true.
				   meteo_fl    = 'bcs/met_hourly.csv'
				   wind_factor = 0.9
				  !-- Parameters
				   ce = 0.0013
				   ch = 0.0013
				   cd  = 0.0013
				  !catchrain      = .true.
				  !rain_threshold = 0.001
				  !runoff_coef    = 0.0
				/

&fetch

Direction-dependent wind sheltering. This block is optional, and supplies the scaling table used by fetch_mode \(= 2\) and \(= 3\) in &meteorology. The scaling is linearly interpolated between the supplied directions and wraps at \(360^{\circ}\).

Variable Name Symbol Description Type Options Default
fetch_sw $$\Theta_{fetch_{sw}}$$ Switch to enable direction-dependent sheltering. Note that GLM sets this from the presence of the &fetch block, so a value given here is overwritten [boolean] .true. OR .false. .false.
num_dir $$N_{\Phi}$$ Number of wind direction reference points being read in [integer] Length of wind_dir and fetch_scale 0
wind_dir $$\Phi_{wind}[1...N_{\Phi}]$$ Wind directions at which the sheltering scale is specified (\(^{\circ}\)) [array] comma-separated list of \(N_{\Phi}\) values -
fetch_scale $$f_{WS}[\Phi_{wind}]$$ Direction-specific sheltering scale. For \(\Theta_{fetch}=3\) this multiplies the wind speed directly; for \(\Theta_{fetch}=2\) it is the fetch length used by the Markfort et al. (2009) effective-area calculation [array] comma-separated list of \(N_{\Phi}\) values -
edge_height $$h_{edge}$$ Height of the vegetation or obstruction at the lake edge (\(m\)). Accepted by the reader; planned for future update [real] - 0
edge_porosity $$\phi_{edge}$$ Porosity of the vegetation or obstruction at the lake edge. Accepted by the reader; planned for future update [real] - 1
Example
&fetch
   num_dir     = 4
   wind_dir    = 0.0, 90.0, 180.0, 270.0
   fetch_scale = 1.0, 0.7,  0.4,   0.7
/

&inflow

Variable Name Symbol Description Type Options Default
num_inflows $$N_{INF}$$ Number of inflows to be simulated in this simulation [integer] 0
names_of_strms - Names of each inflow [string] comma-separated list if \(N_{INF}>1\) -
subm_flag $$\Theta_{subm_I}$$ Switch indicating if the inflow I is entering as a submerged input [boolean] .true. OR .false.
comma-separated list if \(N_{INTF}>1\)
.false.
subm_height $$h_{subm_I}$$ Height above the bottom at which a submerged inflow enters (\(m\)). Required when subm_flag is .true. [real] comma-separated list if \(N_{INTF}>1\) 0
subm_elev - Deprecated alias for subm_height. Still accepted when subm_height is absent, but GLM emits a warning asking for it to be renamed [real] Ignored if subm_height is set -
strm_hf_angle $$\alpha{inf}$$ Angle describing the width of an inflow river channel ("half angle") [real] comma-separated list if \(N_{INF}>1\)
strmbd_slope $$\Phi_{inf}$$ Slope of the streambed / river thalweg for each river (degrees) [real] comma-separated list if \(N_{INF}>1\)
strmbd_drag $$C_{D_{inf}}$$ Drag coefficient of the river inflow thalweg, to calculate entrainment during insertion [real] comma-separated list if \(N_{INF}>1\)
coef_inf_entrain $$C_{entrain}$$ - [real] comma-separated list if \(N_{INF}>1\)
inflow_factor $$f_{inf_{I}}$$ Scaling factor that can be applied to adjust the provided input data [real] comma-separated list if \(N_{INF}>1\) 1
inflow_fl - Filename(s) of the inflow CSV boundary condition files [string] comma-separated list if \(N_{INF}>1\) -
inflow_varnum - Number of variables being listed in the columns of inflow_fl (comma-separated list) [integer] Can include GLM variables including flow, temp and salt, plus WQ variables. 0
inflow_vars - Names of the variables in the inflow_fl [string] Provide variables in the order as they are in the file.
time_fmt - Time format of the 1st column in the inflow_fl [string] 'YYYY-MM-DD hh:mm:ss'
Example
&inflow
				   num_inflows    = 6
				   names_of_strms = 'Inflow1','Inflow2','Inflow3','Inflow4','Inflow5','Inflow6'
				   subm_flag      = .false.,.false.,.false.,.true.,.false.,.false.
				   strm_hf_angle  = 85.0, 85.0, 85.0, 85.0, 85.0, 85.0
				   strmbd_slope   = 4., 4., 4., 4., 4., 4.
				   strmbd_drag    = 0.0160, 0.0160, 0.0160, 0.0160, 0.0160, 0.0160,
				   inflow_factor  = 1.0,1.0,1.0,1.0,1.0,1.0
				   inflow_fl      = 'bcs/inflow_1.csv',
							'bcs/inflow_2.csv',
							'bcs/inflow_3.csv',
							'bcs/inflow_4.csv',
							'bcs/inflow_5.csv',
							'bcs/inflow_6.csv'
				   inflow_varnum    = 3
				   inflow_vars      = 'FLOW','TEMP','SALT'
				   coef_inf_entrain = 0.
				  !time_fmt         = 'YYYY-MM-DD hh:mm:ss'
				/

&outflow

Variable Name Symbol Description Type Options Default
num_outlet $$N_{OUTF}$$ Number of outflows (including withdrawals, outlets or offtakes) to be included in this simulation [integer] - 0
outflow_fl - Filename of the file containing the outflow time-series, \(Q_{outf_x}\) [string] - -
time_fmt - Time format of the 1st column in the outflow_fl [string] 'YYYY-MM-DD hh:mm:ss'
outflow_factor $$f_{outf}$$ Scaling factor used as a multiplier for outflows, such that: \(Q_{outf}=f_{outf}Q_{outf_x}\) [real] comma-separated list if \(N_{OUTF}>1\) 1
outflow_thick_limit $$\delta_{outf_{max}}$$ Maximum vertical limit of withdrawal entrainment [real] comma-separated list if \(N_{OUTF}>1\) -
single_layer_draw $$\Theta_{outf_{single}}$$ Switch to only limit withdrawal entrainment and force outflows from layer at the outlet elevation height [boolean] .true. OR .false.
comma-separated list if \(N_{OUTF}>1\)
.false.
flt_off_sw $$\Theta_{flt_O}$$ Switch to indicate if the outflows are floating offtakes (taking water from near the surface) [boolean] .true. OR .false.
comma-separated list if \(N_{OUTF}>1\)
-
outlet_type $$\Theta_{outf}$$ Switch to configure approach of each withdrawal (comma-separated list if \(N_{OUTF}>1\)) [integer] $$ \left\{ \begin{array}{ll} \textrm{Fixed outlet height } & \Theta_{outf}=1 \\ \textrm{Floating offtake} & \Theta_{outf}=2 \\ \textrm{Adaptive offtake, low oxy avoidance } & \Theta_{outf}=3 \\ \textrm{Adaptive offtake, isotherm following } & \Theta_{outf}=4 \\ \textrm{Adaptive offtake, temp time-series } & \Theta_{outf}=5 \\ \end{array} \right.$$ 1
Normal Withdrawals
outl_elvs $$h_{outf_O}$$ Outlet elevations (\(m\)) [real] comma-separated list if \(N_{OUTF}>1\) 0
bsn_len_outl $$L_{outf_O}$$ Basin length at the outlet height(s) (\(m\)) [real] comma-separated list if \(N_{OUTF}>1\)
bsn_wid_outl $$W_{outf_O}$$ Basin width at the outlet heights (\(m\)) [real] comma-separated list if \(N_{OUTF}>1\)
Adaptive withdrawals
crit_varname - Name of the water quality variable monitored to trigger the adaptive withdrawal, resolved against the active WQ library (renamed from O2name) [string] comma-separated list if \(N_{OUTF}>1\) -
crit_idx - Index of the monitored water quality variable, used when crit_varname is not supplied (renamed from O2idx) [integer] Ignored if crit_varname is set 0
crit_dep $$h_{crit}$$ Elevation at which the monitored variable is sampled (\(m\) above datum) (renamed from crit_O2_dep) [real] Must be \(\ge\) the lowest elevation, \(H[1]\) -1
crit_val $$C_{crit}$$ Threshold value of the monitored variable that triggers the switch to the alternate outlet (renamed from crit_O2) [real] Must be \(\ge 0\) when outlet_crit is set -1
crit_above - Direction of the threshold test: trigger when the monitored value rises above crit_val rather than falling below it [boolean] .true. OR .false. .false.
crit_days $$N_{crit}$$ Number of days the alternate outlet remains engaged once triggered (renamed from crit_O2_days) [integer] Must be \(\ge 1\) when outlet_crit is set -1
outlet_crit $$h_{outf_{crit}}$$ Elevation of the alternate outlet to draw from while the criterion is met (\(m\) above datum). Setting this activates the criterion check [real] comma-separated list if \(N_{OUTF}>1\) -
withdrTemp_fl - Filename of the file containing the temperature time-series the adaptive withdrawal is targeting [string] Required if outlet_type (\(\Theta_{outf}\)) \(=5\) -
Seepage
seepage $$\Theta_{seep}$$ Switch to enable the seepage of water from the lake bottom [boolean] .true. OR .false. .false.
seepage_rate \(G\) or \(K_{seep}\) Seepage rate of water, or, soil hydraulic conductivity (\(m\ day^{-1}\)) [real] -ve seepage_rate is taken as \(G\);
+ve seepage_rate is taken as \(K_{seep}\)
0
Weir overflow
crest_width $$W_{weir}$$ Width of weir (at crest height) where lake overflows (\(m\)) [real] - 6.0
crest_factor $$C_{D_{weir}}$$ Drag coefficient associated with the weir crest, used to compute the overflow discharge rate, \(Q_{weir}\) [real] Applies only when the crest elevation is configured
to be less than the maximum elevation of the domain
(\(H_{crest} < H_{max}\))
0.61
Example
&outflow
				   num_outlet   = 1
				  !flt_off_sw   = .false.
				   outlet_type  = 1
				   outl_elvs    = -215.5
				   bsn_len_outl = 18000
				   bsn_wid_outl = 11000
				   outflow_fl   = 'bcs/outflow.csv'
				   outflow_factor = 1.0
				  !seepage  = .true.
				  !seepage_rate   = 0.01
				/

&evaporation

Supplies a measured evaporation time series in place of the rate GLM computes from the surface energy budget. This block is optional; if it is absent, or if evap_file is left unset, GLM computes evaporation internally.

Variable Name Description Type Options Default
evap_file Name of the CSV file supplying measured evaporation. The file must contain a time column and a column named Evap; GLM stops with an error if either is missing [string] -
time_fmt Format of the time column in evap_file, in the same notation used by the inflow and outflow blocks [string] e.g. YYYY-MM-DD hh:mm:ss -
timezone Timezone offset of the evaporation file. Accepted by the reader; planned for future update — the value is not passed to the file reader [real] - -
Example
&evaporation
   evap_file = 'bcs/evap.csv'
   time_fmt  = 'YYYY-MM-DD hh:mm:ss'
/

&groundwater

This block is read by GLM but is planned for future update — it is not active yet. The values are parsed into their variables, but the routine that would apply a groundwater flux (read_daily_gw) is commented out in glm_model.c, and the setup loop in glm_init.c only runs when the block is absent. For seepage losses use seepage and seepage_rate in &outflow instead. It is documented here so that keys found in older nml files can be recognised.

Variable Name Description Type Options Default
gw_mode Number of groundwater inflows to append to the inflow list. The total of num_inflows and gw_mode must not exceed the compiled inflow limit [integer] - 0
gw_file Name of the groundwater forcing file [string] -
K_gw Hydraulic conductivity of the sediment, one value per groundwater inflow [array] comma-separated list -
L_gw Characteristic flow path length, one value per groundwater inflow [array] comma-separated list -

Engineering Options

&oxygenation

Configures artificial oxygenation, either by direct injection of oxygen at one or more fixed heights, or by a hypolimnetic recirculation system that withdraws water from one height and returns oxygenated water at another. The block requires an active water quality model, because the oxygen is added to a named AED variable; GLM stops with an error if that variable cannot be resolved.

Variable Name Description Type Options Default
oxygenation_mode Operating mode of the oxygenation system [integer] 0 = off
1 = direct addition, constant rates
2 = direct addition, rates read from file
3 = recirculation
0
oxy_name Name of the AED dissolved oxygen variable that the added oxygen is applied to [string] Must match a variable defined by the active WQ model OXY_oxy
oxy_max Optional cap on the resulting oxygen concentration. Values \(\le 0\) disable the cap [real] - 0.0
num_oxy Number of direct-addition devices. Used by modes 1 and 2; the arrays below must each supply this many values [integer] - 0
oxy_input_type How the load of each device is specified: as a mass rate, or as a flow multiplied by a concentration [array] 1 = mass rate (oxy_load)
2 = flow × concentration (oxy_flow, oxy_conc)
-
oxy_height Height above the lake bottom at which each device adds oxygen (\(m\)). The oxygen is added to the layer containing that height [array] comma-separated list of num_oxy values 0.0
oxy_load Oxygen mass loading rate of each device, per day. Used where oxy_input_type is 1 [array] comma-separated list of num_oxy values 0.0
oxy_flow Flow rate through each device (\(m^{3}\;day^{-1}\)). Used with oxy_conc where oxy_input_type is 2 [array] comma-separated list of num_oxy values 0.0
oxy_conc Oxygen concentration of the flow through each device. Used with oxy_flow where oxy_input_type is 2 [array] comma-separated list of num_oxy values 0.0
oxy_fl CSV files supplying time-varying data. In mode 2 one file is opened per device; in mode 3 only the first entry is used, and it supplies the recirculation flow and load [array] comma-separated list of filenames -
oxy_recirc_withdraw_height Height above the lake bottom that water is withdrawn from, in mode 3 (\(m\)) [real] Must be \(\ge 0\) 0.0
oxy_recirc_return_height Height above the lake bottom that the oxygenated water is returned to, in mode 3 (\(m\)) [real] Must be \(\ge 0\) 0.0
oxy_recirc_flow Recirculation flow rate (\(m^{3}\;s^{-1}\)). Overwritten each day from oxy_fl where that file is supplied [real] - 0.0
oxy_recirc_add Oxygen mass added to the recirculated water, per day. Overwritten each day from oxy_fl where that file is supplied [real] - 0.0
time_fmt Format of the time column in the oxy_fl files [string] e.g. YYYY-MM-DD hh:mm:ss -
Example
&oxygenation
   oxygenation_mode = 1
   oxy_name         = 'OXY_oxy'
   num_oxy          = 2
   oxy_input_type   = 1, 1
   oxy_height       = 2.0, 5.0
   oxy_load         = 500.0, 250.0
/

&bubbler

Configures a destratification bubble plume (aeration diffuser line). Note that the keys in this block are unprefixed — on, aflow and so on — so they are easily confused with keys of other blocks if a / terminator is missed.

Variable Name Description Type Options Default
on Switch to enable the bubble plume [boolean] .true. OR .false. .false.
aflow Air flow rate delivered to the diffuser line. The plume is switched off for any step where this is \(\le 0\) [real] - 0.0
nports Number of release ports along the diffuser line [integer] - 0
bublen Length of the diffuser line (\(m\)) [real] - 0.0
bdepth Height above the lake bottom at which the diffuser line sits (\(m\)). This selects the layer the plume is released from [real] - 0.0
start Date the operating period begins. Outside the startstop window the plume is off [string] e.g. 2020-01-01 00:00:00 -
stop Date the operating period ends [string] e.g. 2020-12-31 00:00:00 -
opopt Switch to run the plume on a temperature-difference trigger rather than continuously through the operating window. When .false. the plume runs whenever the date falls inside the window [boolean] .true. OR .false. .false.
ton Surface-to-release-layer temperature difference that switches the plume on (\(^{\circ}C\)). Only used when opopt is .true. [real] - 0.0
toff Temperature difference below which the plume switches off (\(^{\circ}C\)). Only used when opopt is .true. [real] \(<\) ton 0.0
intopt Selects the plume integration option used by the bubble rise calculation [boolean] .true. OR .false. .false.
data_file CSV file supplying time-varying settings, overriding the constants above each day. Must contain a time column plus aFlow, nPorts, bDepth and bLength [string] -
eff Switch to write a plume efficiency diagnostic file [boolean] .true. OR .false. .false.
eff_file Name of the efficiency diagnostic file written when eff is .true. [string] -
Example
&bubbler
   on      = .true.
   aflow   = 0.05
   nports  = 20
   bublen  = 250.0
   bdepth  = 1.0
   start   = '2020-10-01 00:00:00'
   stop    = '2021-04-30 00:00:00'
   opopt   = .true.
   ton     = 3.0
   toff    = 1.0
/

&heat_pump

Configures a heat pump that draws water from a nominated outflow, changes its temperature, and returns it through a nominated inflow. The referenced inflow and outflow must already be declared in &inflow and &outflow; GLM stops with an error if heat_pump_inflow_idx is out of range.

Variable Name Description Type Options Default
heat_pump_switch Operating mode of the heat pump [integer] 0 = off
1 = prescribed temperature change
2 = prescribed heat flux
0
heat_pump_inflow_idx Index of the inflow the heat pump returns water through. The return height is taken from that inflow's subm_height. Zero-based — the first inflow is 0 [integer] \(0 \le i < \) number of inflows 0
heat_pump_outflow_idx Index of the outflow the heat pump withdraws water from. Zero-based — the first outflow is 0 [integer] \(0 \le i < \) number of outflows 0
heat_pump_temp_change Temperature change applied to the water passing through the pump (\(^{\circ}C\)). Used in mode 1 [real] - 0.0
heat_pump_heat_flux Heat flux added to (positive) or removed from (negative) the water (\(W\)). Used in mode 2, and may be overridden day by day from a CSV column [real] - 0.0
Example
&heat_pump
   heat_pump_switch      = 1
   heat_pump_inflow_idx  = 0
   heat_pump_outflow_idx = 0
   heat_pump_temp_change = -3.0
/

Diagnostics

&mass_balance

Writes a per-timestep mass balance file for nominated water quality variables, accounting for the mass entering and leaving through each flux term. This block is optional, and is only processed after the water quality model has been initialised.

Variable Name Description Type Options Default
balance_file Name of the mass balance output file, written into out_dir [string] -
balance_varnum Number of variables listed in balance_vars [integer] Length of balance_vars -
balance_vars Names of the water quality variables to track [array] comma-separated list of balance_varnum names -
time_fmt Format of the time column written to the balance file [string] e.g. YYYY-MM-DD hh:mm:ss -
timezone Timezone offset of the balance file. Accepted by the reader; planned for future update — the value is not passed to the writer [real] - -
Example
&mass_balance
   balance_file   = 'balance.csv'
   balance_varnum = 2
   balance_vars   = 'OXY_oxy', 'NIT_nit'
/

&debugging

Developer switches. These change model behaviour and should not be left set in a production configuration.

Variable Name Description Type Options Default
debug_mixer Switch to write diagnostic output from the surface mixing routine [boolean] .true. OR .false. .false.
disable_evap Switch to turn evaporation off entirely. Intended for isolating the water balance during testing [boolean] .true. OR .false. .false.

Plotting

The three blocks below are not read from glm3.nml. They are read from a separate file, plots.nml in the working directory, and only apply to builds compiled with on-screen plotting support. A different filename can be given on the GLM command line. If the file cannot be opened, or a block within it cannot be read, GLM prints a warning and falls back to the built-in defaults shown below.

&plots_window

Size of the window that holds the plot panels.

Variable Name Description Type Options Default
width Width of the plot window, in pixels [integer] - 1000
height Height of the plot window, in pixels [integer] - 300

&plots

Defines the contour panels drawn during the run. The list variables each supply one entry per panel.

Variable Name Description Type Options Default
nplots Number of plot panels to draw [integer] Length of vars 2
plot_width Width of an individual panel, in pixels [integer] - 400
plot_height Height of an individual panel, in pixels [integer] - 200
vars Names of the variables to plot, one per panel [array] comma-separated list of nplots names temp, salt
title Title displayed above each panel [array] comma-separated list of nplots strings Temperature, Salinity
title_font Font used for the panel titles [string] -
title_size Point size of the panel titles [integer] - -
label_font Font used for the axis labels [string] -
label_size Point size of the axis labels [integer] - -
min_z Lower limit of the colour scale for each panel [array] comma-separated list of nplots values -1.0, 0.0
max_z Upper limit of the colour scale for each panel [array] comma-separated list of nplots values 30.0, 0.6
min_y Lower limit of the vertical axis for each panel. Negative values leave the axis to be scaled automatically [array] comma-separated list of nplots values -1
max_y Upper limit of the vertical axis for each panel. Negative values leave the axis to be scaled automatically [array] comma-separated list of nplots values -1
Example
&plots_window
   width  = 1000
   height = 300
/
&plots
   nplots      = 2
   plot_width  = 400
   plot_height = 200
   title       = 'Temperature', 'Salinity'
   vars        = 'temp', 'salt'
   min_z       = -1.0, 0.0
   max_z       = 30.0, 0.6
/

&animate

Writes the plot panels out as an image sequence so the run can be replayed as an animation.

Variable Name Description Type Options Default
nanim Number of variables to animate [integer] Length of vars -
vars Names of the variables to animate [array] comma-separated list of nanim names -
fnames Output filename for each animated variable [array] comma-separated list of nanim filenames -
anim_delay Delay between successive frames [integer] - -