def load_mask_modis(catchment, mask_folder, modis_dem): ''' load mask and trimmed mask of catchment for modis clutha domain ''' if modis_dem == 'clutha_dem_250m': _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( None, extent_w=1.2e6, extent_e=1.4e6, extent_n=5.13e6, extent_s=4.82e6, resolution=250, origin='bottomleft') if modis_dem == 'si_dem_250m': _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( None, extent_w=1.08e6, extent_e=1.72e6, extent_n=5.52e6, extent_s=4.82e6, resolution=250, origin='bottomleft') if modis_dem == 'modis_si_dem_250m': _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( None, extent_w=1.085e6, extent_e=1.72e6, extent_n=5.52e6, extent_s=4.82e6, resolution=250, origin='bottomleft') if modis_dem == 'modis_nz_dem_250m': _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( None, extent_w=1.085e6, extent_e=2.10e6, extent_n=6.20e6, extent_s=4.70e6, resolution=250, origin='bottomleft') # # Get the masks for the individual regions of interest mask = np.load(mask_folder + '/{}_{}.npy'.format(catchment, modis_dem)) _, _, trimmed_mask, _, _ = trim_lat_lon_bounds(mask, lat_array, lon_array, mask.copy(), y_centres, x_centres) return mask, trimmed_mask
def load_mask_modis(catchment, output_dem, mask_folder, dem_folder, modis_dem): ''' load mask and trimmed mask of catchment for modis clutha domain ''' if modis_dem == 'clutha_dem_250m': # dem_file = dem_folder + modis_dem + '.tif' _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(None) if modis_dem == 'si_dem_250m': # dem_file = dem_folder + modis_dem + '.tif' _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( None, extent_w=1.08e6, extent_e=1.72e6, extent_n=5.52e6, extent_s=4.82e6, resolution=250) if modis_dem == 'modis_si_dem_250m': # dem_file = dem_folder + modis_dem + '.tif' _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( None, extent_w=1.085e6, extent_e=1.72e6, extent_n=5.52e6, extent_s=4.82e6, resolution=250) # # Get the masks for the individual regions of interest mask = np.load(mask_folder + '/{}_{}.npy'.format(catchment, modis_dem)) _, _, trimmed_mask, _, _ = trim_lat_lon_bounds(mask, lat_array, lon_array, mask.copy(), y_centres, x_centres) return mask, trimmed_mask
years_to_take = range(2000, 2016 + 1) # range(2001, 2013 + 1) ta_version = 'jobst_ucc' # input met data nc_file_rain = 'Z:/JOBST_met_data/PRECIP_WITH_UCC/CLUTHA_PRECIP_250m_' # provide only partial filename up to 01-Jan-2000to31-dec-2000 nc_file_tmax = 'Z:/JOBST_met_data/Tmax/CLUTHA_Tmax_250m_' nc_file_tmin = 'Z:/JOBST_met_data/Tmin/CLUTHA_Tmin_250m_' nc_file_srad = 'Z:/newVCSN/srad_vclim_clidb_1972010100_2017102000_south-island_p05_daily.nc' # output met data met_out_folder = 'T:/DSC-Snow/input_data_hourly' #### # set up input and output DEM for processing # output DEM nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( dem_file, origin=origin) data_id = '{}_{}'.format(catchment, output_dem) # name to identify the output data if mask_dem == True: # Get the masks for the individual regions of interest if mask_created == True: # load precalculated mask mask = np.load(mask_folder + '/{}_{}.npy'.format(catchment, output_dem)) if origin == 'topleft': mask = np.flipud(mask) else: # create mask and save to npy file # masks = get_masks() #TODO set up for multiple masks mask = create_mask_from_shpfile(lat_array, lon_array, mask_shpfile) if origin == 'topleft': # flip to save as bottom left mask = np.flipud(mask) np.save(mask_folder + '/{}_{}.npy'.format(catchment, output_dem),
catchment = 'SI' output_dem = 'si_dem_250m' # identifier for output dem years_to_take = np.arange(2001, 2020 + 1) # [2013 + 1] # range(2001, 2013 + 1) model_swe_sc_threshold = 20 # threshold for treating a grid cell as snow covered (mm w.e) model_output_folder = '/nesi/nobackup/niwa00004/jonoconway/snow_sims_nz/vcsn' plot_folder = '/nesi/nobackup/niwa00004/jonoconway/snow_sims_nz' dem_folder = '/nesi/project/niwa00004/jonoconway' # dem used for output #'C:/Users/conwayjp/OneDrive - NIWA/Data/GIS_DATA/Topography/DEM_NZSOS'# print('loading dem') # load si dem and trim to size. (modis has smaller extent to west (1.085e6) si_dem_file = dem_folder + '/si_dem_250m' + '.tif' nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( si_dem_file, extent_w=1.08e6, extent_e=1.72e6, extent_n=5.52e6, extent_s=4.82e6, resolution=250) nztm_dem = nztm_dem[:, 20:] x_centres = x_centres[20:] lat_array = lat_array[:, 20:] lon_array = lon_array[:, 20:] plt.rcParams.update({'font.size': 6}) plt.rcParams.update({'axes.titlesize': 6}) bin_edges = [-0.001, 30, 60, 90, 120, 180, 270, 360 ] # use small negative number to include 0 in the interpolation for i, year_to_take in enumerate(years_to_take):
1) # [2013 + 1] # range(2001, 2013 + 1) plot_folder = 'C:/Users/conwayjp/OneDrive - NIWA/projects/CARH2101/snow reanalysis/NZ/august2021' #TODO # plot_folder = '/nesi/nobackup/niwa00004/jonoconway/snow_sims_nz' # model_analysis_area = 145378 # sq km. catchment = 'NZ' # string identifying catchment modelled #TODO mask_folder = 'C:/Users/conwayjp/OneDrive - NIWA/projects/CARH2101/snow reanalysis' dem_folder = 'C:/Users/conwayjp/OneDrive - NIWA/Data/GIS_DATA/Topography/DEM_NZSOS' modis_dem = 'modis_nz_dem_250m' #TODO if modis_dem == 'modis_si_dem_250m': si_dem_file = dem_folder + '/si_dem_250m' + '.tif' nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( si_dem_file, extent_w=1.08e6, extent_e=1.72e6, extent_n=5.52e6, extent_s=4.82e6, resolution=250) nztm_dem = nztm_dem[:, 20:] x_centres = x_centres[20:] lat_array = lat_array[:, 20:] lon_array = lon_array[:, 20:] modis_output_dem = 'si_dem_250m' mask = np.load(mask_folder + '/{}_{}.npy'.format(catchment, modis_dem)) elif modis_dem == 'modis_nz_dem_250m': si_dem_file = dem_folder + '/nz_dem_250m' + '.tif' _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( None, extent_w=1.085e6,
in_elev = np.ones((260, 243)) # code to get output lat/lons # dem_folder = '/mnt/data/GIS_DATA/Topography/DEM_NZSOS/' #catchment = 'Clutha' dem = 'clutha_dem_250m' #subcatchment = 'qldc_ta_area' catchment = 'Clutha' mask_folder = r'C:\Users\conwayjp\OneDrive - NIWA\Temp\Masks' # dem_file = dem_folder + dem + '.tif' # elev, easting, northing, lat_array, lon_array = setup_nztm_dem(dem_file) # create new outlons and out_lats using trim for the qldc mask here nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( dem_file=None) mask = np.load(mask_folder + '/{}_{}.npy'.format(catchment, dem)) # qldc_mask = np.load(mask_folder + '/{}_{}.npy'.format(subcatchment, dem)) out_lats, out_lons, trimmed_mask, _, _ = trim_lat_lon_bounds( mask, lat_array, lon_array, mask.copy(), y_centres, x_centres) # returns: lats, lons, elev, northings, eastings mask = trimmed_mask #out_lons = lon_array out_lats = np.flipud(out_lats) #(lat_array) # northing = np.flipud(northing) # out_elev = elev out_elev = trimmed_mask * 0.0
""" create masks for NZ and SI wide domains for simulations Jono Conway """ import matplotlib.pylab as plt import numpy as np from nz_snow_tools.util.utils import setup_nztm_dem # # set up modis 250m nz grid nztm_dem2, x_centres2, y_centres2, lat_array2, lon_array2 = setup_nztm_dem( None, extent_w=1.085e6, extent_e=2.10e6, extent_n=6.20e6, extent_s=4.70e6, resolution=250, origin='bottomleft') # read in 250m grid topography from nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( r"C:\Users\conwayjp\OneDrive - NIWA\Data\GIS_DATA\Topography\DEM_NZSOS\nz_dem_250m.tif", extent_w=1.05e6, extent_e=2.10e6, extent_n=6.275e6, extent_s=4.70e6, resolution=250, origin='bottomleft') # mask for nz modis domain on nz 250m dem domain modis_nz_ew_extent = np.logical_and(x_centres > 1.085e6, x_centres < 2.10e6)
import netCDF4 as nc import numpy as np import matplotlib.pylab as plt from nz_snow_tools.util.utils import setup_nztm_dem origin = 'topleft' # origin of new DEM surface out_file = 'C:/Users/conwayjp/OneDrive - NIWA/projects/DSC Snow/Projects-DSC-Snow/runs/idealised/met_off_origin{}.nc'.format(origin) inp_t = -2.0 inp_p = 20.0 # create new dem surface _, eastings, northings, lats, lons = setup_nztm_dem(dem_file=None, extent_w=1.235e6, extent_e=1.26e6, extent_n=5.05e6, extent_s=5.025e6, resolution=250, origin=origin) elev = np.zeros((100, 100)) # set up dummy elevation at 0 # put onto new grid t_grid = inp_t * np.ones((100, 100)) p_grid = inp_p * np.ones((100, 100)) file_out = nc.Dataset(out_file, 'w') # start with georeferencing file_out.createDimension('rows', len(northings)) file_out.createDimension('columns', len(eastings)) file_out.createDimension('latitude', len(northings)) file_out.createDimension('longitude', len(eastings))
# import argparse import netCDF4 as nc import numpy as np import matplotlib.pylab as plt from nz_snow_tools.util.utils import setup_nztm_dem from nz_snow_tools.util.write_fsca_to_netcdf import setup_nztm_grid_netcdf lapse = -0.005 climate_file = nc.Dataset( r"T:\DSC-Snow\input_data_hourly\met_inp_Clutha_nztm250m_2016_norton_topleft.nc" ) origin = 'topleft' # origin of new DEM surface # create dem surface clutha_dem, inp_eastings, inp_northings, _, _ = setup_nztm_dem( 'Z:/GIS_DATA/Topography/DEM_NZSOS/clutha_dem_250m.tif') y_point = np.where( climate_file.variables['northing'][:] == inp_northings[703])[0][0] x_point = np.where( climate_file.variables['easting'][:] == inp_eastings[133])[0][0] inp_t = climate_file.variables['air_temperature'][:, y_point, x_point] inp_p = climate_file.variables['precipitation_amount'][:, y_point, x_point] inp_sw = climate_file.variables['surface_downwelling_shortwave_flux'][:, y_point, x_point] inp_elev = climate_file.variables['elevation'][y_point, x_point] hourly_dt = nc.num2date(climate_file.variables['time'][:], climate_file.variables['time'].units) # create new dem surface
import pickle import netCDF4 as nc import numpy as np import matplotlib.pylab as plt from nz_snow_tools.util.utils import setup_nztm_dem origin = 'topleft' # origin of new DEM surface out_file = '/met_offset_origin{}_trimmed2_withnan.nc'.format(origin) working_folder = 'C:/Users/conwayjp/OneDrive - NIWA/projects/DSC Snow/for_Christian_June2021' # load dem surface dem_file = 'C:/Users/conwayjp/OneDrive - NIWA/Data/GIS_DATA/Topography/DEM_NZSOS/si_dem_250m.tif' elev, eastings, northings, lats, lons = setup_nztm_dem(dem_file, extent_w=1.08e6, extent_e=1.72e6, extent_n=5.52e6, extent_s=4.82e6, resolution=250) # load t offset file - Trimmed2 has areas wiht poor model performance removed. t_grid = pickle.load(open( working_folder + '/t_bias_optim_t_NS_SouthIsland_swe20_norton_5_t-2_p0_topleft_rs4_smooth10_trimmed2_fullres_withnan.pkl', 'rb'), encoding='latin1') # set precip offset to 0 # p_grid = np.zeros(t_grid.shape) file_out = nc.Dataset(working_folder + out_file, 'w') # start with georeferencing
skip_header=1, usecols=2) hs_sites['elevation'] = np.genfromtxt(store_folder + '/SIN snow depth sites.csv', delimiter=',', skip_header=1, usecols=3) dem_folder = 'C:/Users/conwayjp/OneDrive - NIWA/Data/GIS_DATA/Topography/DEM_NZSOS/' dem = 'nz_dem_500m' dem_file = dem_folder + dem + '.tif' nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( dem_file, extent_w=1.05e6, extent_e=2.10e6, extent_n=6.275e6, extent_s=4.70e6, resolution=500) # point = wgs84_to_nztm(-45,176) map_crs = ccrs.TransverseMercator(central_longitude=173.0, central_latitude=0.0, false_easting=1600000, false_northing=10000000, scale_factor=0.9996, globe=ccrs.Globe(ellipse='GRS80')) data_crs = ccrs.PlateCarree() # data is in lat/lon coordinates plt.figure(figsize=(4.5, 5))
catchment = 'SI' # identifier for catchment mask and output netcdf mask_dem = False # boolean to set whether or not to mask the output dem output_dem = 'nztm250m' # identifier for output dem out_file = 'C:/Users/conwayjp/OneDrive - NIWA/projects/DSC Snow/Projects-DSC-Snow/runs/input_DEM/{}_{}_topo_no_ice_origin{}.nc'.format( catchment, output_dem, origin) sky_view_file = 'C:/Users/conwayjp/OneDrive - NIWA/Data/GIS_DATA/Topography/DEM_NZSOS/nzdem_SI_125v1_Vsky_DS.tif' # parameters needed only for mask mask_shpfile = ( 'Z:/GIS_DATA/Hydrology/Catchments/{} full WGS84.shp'.format(catchment)) mask_created = True # boolean to set whether or not the mask has already been created #input_dem = 'clutha_dem_250m' input_dem = dem_file.split('/')[-1].split('.')[0] if input_dem == 'clutha_dem_250m': nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( dem_file=dem_file, origin=origin) elif input_dem == 'si_dem_250m': nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem( dem_file=dem_file, origin=origin, extent_w=1.08e6, extent_e=1.72e6, extent_n=5.52e6, extent_s=4.82e6, resolution=250) else: print('cannot interpret dem file specified') if sky_view_file is not None: nztm_skyview, _, _, _, _ = setup_nztm_dem(dem_file=sky_view_file,