Calibrate GLM parameters for water temperature simulation. Use when you need to adjust model parameters to minimize RMSE between simulated and observed temperatures.
GLM calibration involves adjusting physical parameters to minimize the difference between simulated and observed water temperatures. The goal is typically to achieve RMSE < 2.0°C.
| Parameter | Section | Description | Default | Range |
|---|---|---|---|---|
Kw | &light | Light extinction coefficient (m⁻¹) | 0.3 | 0.1 - 0.5 |
coef_mix_hyp | &mixing | Hypolimnetic mixing coefficient | 0.5 | 0.3 - 0.7 |
wind_factor | &meteorology | Wind speed scaling factor | 1.0 | 0.7 - 1.3 |
lw_factor&meteorology |
| Longwave radiation scaling |
| 1.0 |
| 0.7 - 1.3 |
ch | &meteorology | Sensible heat transfer coefficient | 0.0013 | 0.0005 - 0.002 |
| Parameter | Increase Effect | Decrease Effect |
|---|---|---|
Kw | Less light penetration, cooler deep water | More light penetration, warmer deep water |
coef_mix_hyp | More deep mixing, weaker stratification | Less mixing, stronger stratification |
wind_factor | More surface mixing | Less surface mixing |
lw_factor | More heat input | Less heat input |
ch | More sensible heat exchange | Less heat exchange |
from scipy.optimize import minimize
def objective(x):
Kw, coef_mix_hyp, wind_factor, lw_factor, ch = x
# Modify parameters
params = {
'Kw': round(Kw, 4),
'coef_mix_hyp': round(coef_mix_hyp, 4),
'wind_factor': round(wind_factor, 4),
'lw_factor': round(lw_factor, 4),
'ch': round(ch, 6)
}
modify_nml('glm3.nml', params)
# Run GLM
subprocess.run(['glm'], capture_output=True)
# Calculate RMSE
rmse = calculate_rmse(sim_df, obs_df)
return rmse
# Initial values (defaults)
x0 = [0.3, 0.5, 1.0, 1.0, 0.0013]
# Run optimization
result = minimize(
objective,
x0,
method='Nelder-Mead',
options={'maxiter': 150}
)
wind_factorKwcoef_mix_hyp| Issue | Likely Cause | Solution |
|---|---|---|
| Surface too warm | Low wind mixing | Increase wind_factor |
| Deep water too warm | Too much light penetration | Increase Kw |
| Weak stratification | Too much mixing | Decrease coef_mix_hyp |
| Overall warm bias | Heat budget too high | Decrease lw_factor or ch |