Skip to content

Commit

Permalink
Merge pull request #146 from geocryology/grid-elev-in-scaled
Browse files Browse the repository at this point in the history
Include grid elevation in scaled results
  • Loading branch information
nicholas512 authored Mar 12, 2024
2 parents 435e38d + e1acef3 commit cea2fec
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 2 deletions.
2 changes: 1 addition & 1 deletion globsim/_version.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
__version__ = "3.9.1"
__version__ = "3.9.2"


3 changes: 3 additions & 0 deletions globsim/scale/ERA5scale.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,9 @@ def process(self):
self.nc_pl_sur, self.times_out_nc,
t_unit=self.scaled_t_units,
station_names=stations)
# add surface height
self.add_grid_elevation(self.rg, self.getValues(self.nc_to, 'z')[0, :] / const.G)

self.indProcess()

logger.info(f"Created scaled output file {self.output_file}")
Expand Down
19 changes: 19 additions & 0 deletions globsim/scale/GenericScale.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,25 @@ def run_kernels(self):
def _rh(self) -> Callable:
rh_function = getattr(met, self._rh_function_name)
return rh_function

def add_grid_elevation(self, ncf: "nc.Dataset", data: np.ndarray) -> None:
"""Add station elevation to the netCDF file"""
elev_var = ncf.createVariable('grid_elevation', 'f4', ('station',))
elev_var.units = 'm'
elev_var.long_name = 'grid elevation'
elev_var.comment = 'Elevation of the grid cell at the station location'
elev_var[:] = data

self.warn_station_elevation(data)

def warn_station_elevation(self, data: "np.ndarray") -> None:
"""Warn if there are stations with elevation below grid level"""
stn_elev = self.stations['elevation_m']
stn_name = self.stations['station_name']

for i, (stn, grid) in enumerate(zip(stn_elev, data)):
if stn < grid:
logger.warning(f" {stn_name[i]} site elevation ({stn} m) is below reanalysis grid elevation ({grid} m). Results may be unreliable.")


def _check_timestep_length(nctime: "nc.Variable", source:str) -> None:
Expand Down
4 changes: 4 additions & 0 deletions globsim/scale/JRAscale.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ def process(self):
self.rg = new_scaled_netcdf(self.output_file, self.nc_pl_sur,
self.times_out_nc, self.nc_pl_sur['time'].units)

# add station names to netcdf
self.add_grid_elevation(self.rg, self.get_values("to", "Geopotential",
(0, slice(None,None,1))) / const.G) # [m]

# add station names to netcdf
# first convert to character array
names_out = nc.stringtochar(np.array(self.stations['station_name'], 'S32'))
Expand Down
5 changes: 4 additions & 1 deletion globsim/scale/MERRAscale.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,10 @@ def process(self):
self.nc_pl_sur,
self.times_out_nc,
t_unit=self.scaled_t_units)


# add grid elevation to netCDF
self.add_grid_elevation(self.rg, self.nc_sc['PHIS'][0, :] / const.G)

# add station names to netcdf
# first convert to character array
names_out = nc.stringtochar(np.array(self.stations['station_name'], 'S32'))
Expand Down

0 comments on commit cea2fec

Please sign in to comment.