netcdf-analysis · git:20260424.d50cf5a · 2026-04-24 · sha256 596b94c00cd4ae55
netcdf-analysis git:20260424.d50cf5aA
Immutable. This exact content never changes and is served at /api/v1/blob/596b94c00cd4ae55.
---
name: netcdf-analysis
description: Reading and analyzing GLM NetCDF output with Python netCDF4 and pandas for RMSE evaluation.
---
# NetCDF Analysis for GLM Output
## Reading GLM Output
```python
import netCDF4 as nc
import numpy as np
import pandas as pd
ds = nc.Dataset('output/output.nc')
temp = ds.variables['temp'][:] # masked array [time, layers]
z = ds.variables['z'][:] # height above bottom [time, layers]
time_var = ds.variables['time']
times = nc.num2date(time_var[:], time_var.units)
```
## Extracting Temperature at Specific Depths
GLM uses variable layer heights. For each timestep:
```python
lake_depth = 25 # from morphometry (crest_elev - min(H))
for t in range(len(times)):
valid = ~temp[t].mask if hasattr(temp[t], 'mask') else np.ones(temp.shape[1], bool)
depths_from_surface = lake_depth - z[t, valid]
temps = temp[t, valid]
# Interpolate to desired depth
```
## RMSE Calculation
```python
# Merge on exact datetime and rounded depth
# rmse = sqrt(mean((obs - sim) ** 2))
```
## Key Notes
- GLM z is height from lake bottom; depth = lake_depth - z
- Round depths to nearest integer for matching
- Use exact datetime matching (no nearest-time)