def forcing_from_thredds(sites, forc_vars): """ :param sites: dict with site-name as key and list of [lat, lon] as value. .param forc_vars: list of forcing variables to be inserted as forcing :return: """ thredds_url = "http://thredds.met.no/thredds/dodsC/arome25/arome_metcoop_test2_5km_latest.nc" thredds_file = netCDF4.Dataset(thredds_url, "r") latvar = thredds_file.variables["latitude"] lonvar = thredds_file.variables["longitude"] no_points = len(sites) point_index = [tunnel_fast(latvar, lonvar, coord[0], coord[1]) for coord in sites.values()] cnc = CrocusForcing(no_points=no_points, source="arome") # init Crocus forcing file cnc.forc_time_step_v[:] = 3600.0 for point in range(no_points): for var in forc_vars: cnc.insert_arome_var(var, thredds_file.variables) # cnc.tair_v[:, point] = thredds_file.variables[cnc.crocus_arome_lut[cnc.tair_v.name]][:, 0, point_index[point][0], point_index[point][1]] time_v = thredds_file.variables["time"] cnc.time_v[:] = time_v[:] cnc.time_v.units = time_v.units cnc.close() thredds_file.close()
# Long-wave radiation lw_amp = 75. # amplitude of the long-wave signal lw_offset = - (2*np.pi*3./24.) # offset of the daily LW maximum wrt the SW maximum lw_mean = 275. # LW minimum in W/m2 lw_down = (np.sin(2*np.pi*1/24.*n_arr + lw_offset) * lw_amp) + lw_mean # W/m2 sca_sw_down = np.zeros_like(time_arr, dtype=float) wind = np.zeros_like(time_arr, dtype=float) wind += 2.0 # m/s wind_dir = np.zeros_like(time_arr, dtype=float) co2_air = np.zeros_like(time_arr, dtype=float) cnc = CrocusForcing(opt_param=['Wind_DIR', 'CO2air']) # init Crocus forcing file # Set some properties cnc.forc_time_step_v[:] = dt.seconds #cnc.aspect_v[:] = 0.0 cnc.uref_v[:] = 10.0 cnc.zref_v[:] = 2.0 cnc.zs_v[:] = 950.0 cnc.lat_v[:] = 60.0 cnc.lon_v[:] = 10.0 # TODO: use date2num to get the time right cnc.time_v[:] = time_v cnc.time_v.units = t_units # Set the created forcing parameters
points = {'Hemsedal': [60.86, 8.6], 'Nordøyan fyr': [64.8, 10.55] } indicies = [tunnel_fast(latvar, lonvar, coord[0], coord[1]) for coord in points.values()] #[print(coord[0], coord[1]) for coord in points.values()] print(indicies, type(indicies[0]), len(points)) # iy,ix = tunnel_fast(latvar, lonvar, 60.86, 8.6) # Hemsedal # iy,ix = tunnel_fast(latvar, lonvar, 64.8, 10.55) # Nordøyan fyr #print('Closest lat, lon: {0}, {1}; corresponding to indicies: {2}, {3}'.format(latvar[iy,ix], lonvar[iy,ix], iy, ix)) cnc = CrocusForcing(no_points=len(points)) for point in xrange(len(points)): print(point, indicies[point][0], indicies[point][1]) cnc.tair_v[:, point] = ncfile.variables['air_temperature_2m'][:, 0, indicies[point][0], indicies[point][1]] time_v = ncfile.variables['time'] cnc.time_v[:] = time_v[:] cnc.time_v.units = time_v.units cnc.close() ncfile.close() #temperature_plot(ta2m, times)
rainf = np.zeros_like(time_arr, dtype=float) snowf = np.zeros_like(time_arr, dtype=float) snowf[mask_snow1[0]] += 1.0e-03 snowf[mask_snow2[0]] += 1.0e-03 snowf[mask_snow3[0]] += 1.0e-03 wind = np.zeros_like(time_arr, dtype=float) wind += 2.0 # m/s wind_dir = np.zeros_like(time_arr, dtype=float) cnc = CrocusForcing(opt_param=['Wind_DIR']) # init Crocus forcing file # Set some properties cnc.forc_time_step_v[:] = dt.seconds cnc.uref_v[:] = 10.0 cnc.zref_v[:] = 2.0 cnc.zs_v[:] = 950.0 cnc.lat_v[:] = 60.0 cnc.lon_v[:] = 10.0 # TODO: use date2num to get the time right cnc.time_v[:] = time_v cnc.time_v.units = t_units # Set the created forcing parameters