name: glm-calibration
description: Calibrate GLM parameters for water temperature simulation. Use when you need to adjust model parameters to minimize RMSE between simulated and observed temperatures.
license: MIT
GLM Calibration Guide
Overview
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.
Key Calibration Parameters
| 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 Effects
| 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 |
Calibration with Optimization
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}
)
Manual Calibration Strategy
- Start with default parameters, run GLM, calculate RMSE
- Adjust one parameter at a time
- If surface too warm → increase
wind_factor
- If deep water too warm → increase
Kw
- If stratification too weak → decrease
coef_mix_hyp
- Iterate until RMSE < 2.0°C
Common Issues
| 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 |
Best Practices
- Change one parameter at a time when manually calibrating
- Keep parameters within physical ranges
- Use optimization for fine-tuning after manual adjustment
- Target RMSE < 2.0°C for good calibration