Source code for pycif.plugins.datastreams.fluxes.edgar_v5.read
import datetime
import glob
import os
from netCDF4 import Dataset, num2date
import numpy as np
import xarray as xr
from logging import info
[docs]
def read(
self,
name,
varnames,
dates,
files,
interpol_flx=False,
tracer=None,
model=None,
**kwargs
):
# Reading fluxes for periods within the simulation window
trcr_flx = []
trcr_dates = []
for dd, file_flx in zip(dates, files):
# Check if "time" is in variables
# Do not do it with open_dataset which is slow with big files...
with Dataset(file_flx, "r") as f:
available_time = "time" in f.variables
if available_time:
with Dataset(file_flx, "r") as f:
times = f.variables["time"]
times = num2date(times[:], times.units,
only_use_python_datetimes=True,
only_use_cftime_datetimes=False)
ind_data = np.where(times == dd[1])[0][0]
# Now read the data at the correct index
with Dataset(file_flx, "r") as f:
data = f.variables[varnames][ind_data].data
else:
nc = xr.open_dataset(file_flx)
data = nc[varnames].values
trcr_flx.append(
np.concatenate([data[:, :1800], data[:, 1800:]], axis=1))
trcr_dates.append(dd[0])
return xr.DataArray(
np.array(trcr_flx)[:, np.newaxis, ...],
coords={"time": trcr_dates},
dims=("time", "lev", "lat", "lon"),
)