def Pclw(self, lat, lon): if not self._Pclw: vals = load_data(os.path.join(dataset_dir, 'p840/v7_Pclw.txt')) lats = load_data(os.path.join(dataset_dir, 'p840/v7_Lat.txt')) lons = load_data(os.path.join(dataset_dir, 'p840/v7_Lon.txt')) self._Pclw = bilinear_2D_interpolator(lats, lons, vals) return self._Pclw(np.array([lat.ravel(), lon.ravel()]).T).reshape(lat.shape)
def N_wet(self, lat, lon): if not self._N_wet: vals = load_data(os.path.join(dataset_dir, 'p453/v12_ESANWET.txt')) lats = load_data(os.path.join(dataset_dir, 'p453/v12_ESALAT.txt')) lons = load_data(os.path.join(dataset_dir, 'p453/v12_ESALON.txt')) self._N_wet = bilinear_2D_interpolator(lats, lons, vals) return self._N_wet(np.array([lat.ravel(), lon.ravel()]).T).reshape(lat.shape)
def sigma(self, lat, lon): if not self._sigma: vals = load_data( os.path.join(dataset_dir, 'p840/v4_WRED_LOGNORMAL_STDEV.txt')) lats = load_data(os.path.join(dataset_dir, 'p840/v4_Lat.txt')) lons = load_data(os.path.join(dataset_dir, 'p840/v4_Lon.txt')) self._sigma = bilinear_2D_interpolator(lats, lons, vals) return self._sigma(np.array([lat.ravel(), lon.ravel()]).T).reshape(lat.shape)
def isotherm_0(self, lat, lon): if not self._zero_isotherm_data: vals = load_data( os.path.join(dataset_dir, 'p839/v3_ESA0HEIGHT.txt')) lats = load_data(os.path.join(dataset_dir, 'p839/v3_ESALAT.txt')) lons = load_data(os.path.join(dataset_dir, 'p839/v3_ESALON.txt')) self._zero_isotherm_data = bilinear_2D_interpolator( lats, lons, vals) return self._zero_isotherm_data( np.array([lat.ravel(), lon.ravel()]).T).reshape(lat.shape)
def temperature(self, lat, lon): if not self._temperature: vals = load_data(os.path.join(dataset_dir, 'p1510/v1_T_Annual.h5')) lats = load_data(os.path.join(dataset_dir, 'p1510/v1_Lat.h5')) lons = load_data(os.path.join(dataset_dir, 'p1510/v1_Lon.h5')) self._temperature = bilinear_2D_interpolator( np.flipud(lats), lons, np.flipud(vals)) lon[lon > 180] = lon[lon > 180] - 360 return self._temperature( np.array([lat.ravel(), lon.ravel()]).T).reshape(lat.shape)
def Beta(self, lat, lon): if not self._Beta: vals = load_data( os.path.join(dataset_dir, 'p837/ESARAIN_BETA_v5.txt')) lats = load_data( os.path.join(dataset_dir, 'p837/ESARAIN_LAT_v5.txt')) lons = load_data( os.path.join(dataset_dir, 'p837/ESARAIN_LON_v5.txt')) self._Beta = bilinear_2D_interpolator(lats, lons, vals) return self._Beta(np.array([lat.ravel(), lon.ravel()]).T).reshape(lat.shape)
def pressure(self, lat, lon): if not self._pressure: vals = load_data(os.path.join(dataset_dir, 'p1853/v2_P_Annual.h5')) lats = load_data(os.path.join(dataset_dir, 'p1853/v2_Lat.h5')) lons = load_data(os.path.join(dataset_dir, 'p1853/v2_Lon.h5')) self._pressure = bilinear_2D_interpolator(np.flipud(lats), lons, np.flipud(vals)) # In this recommendation the longitude is encoded with format -180 to # 180 whereas we always use 0 - 360 encoding lon[lon > 180] = lon[lon > 180] - 360 return self._pressure(np.array([lat.ravel(), lon.ravel()]).T).reshape(lat.shape)
def R001(self, lat, lon): if not self._R001: lats = load_data(os.path.join(dataset_dir, 'p837/v7_LAT_R001.h5')) lons = load_data(os.path.join(dataset_dir, 'p837/v7_LON_R001.h5')) vals = load_data(os.path.join(dataset_dir, 'p837/v7_R001.h5')) self._R001 = bilinear_2D_interpolator(np.flipud(lats), lons, np.flipud(vals)) # In this recommendation the longitude is encoded with format -180 to # 180 whereas we always use 0 - 360 encoding lon = np.array(lon) lon[lon > 180] = lon[lon > 180] - 360 return self._R001(np.array([lat.ravel(), lon.ravel()]).T).reshape(lat.shape)
def VSCH(self, lat, lon, p): if not self._VSCH: ps = [0.1, 0.2, 0.3, 0.5, 1, 2, 3, 5, 10, 20, 30, 50, 60, 70, 80, 90, 95, 99] d_dir = os.path.join(dataset_dir, 'p836/v4_VSCH_%s.txt') lats = load_data(os.path.join(dataset_dir, 'p836/v4_Lat.txt')) lons = load_data(os.path.join(dataset_dir, 'p836/v4_Lon.txt')) for p_loads in ps: vals = load_data(d_dir % (str(p_loads).replace('.', ''))) self._VSCH[float(p_loads)] =\ bilinear_2D_interpolator(lats, lons, vals) return self._VSCH[float(p)]( np.array([lat.ravel(), lon.ravel()]).T).reshape(lat.shape)
def month_temperature(self, lat, lon, m): if not self._month_temperature: lats = load_data(os.path.join(dataset_dir, 'p1510/v1_Lat.h5')) lons = load_data(os.path.join(dataset_dir, 'p1510/v1_Lon.h5')) for _m in self.__months: vals = load_data( os.path.join(dataset_dir, 'p1510/v1_T_Month{0:02d}.h5').format(_m)) self._month_temperature[_m] = bilinear_2D_interpolator( np.flipud(lats), lons, np.flipud(vals)) lon[lon > 180] = lon[lon > 180] - 360 return self._month_temperature[m](np.array([lat.ravel(), lon.ravel() ]).T).reshape(lat.shape)
def s_a(self, lat, lon): """ Standard deviation of terrain heights (m) within a 110 km × 110 km area with a 30 s resolution (e.g. the Globe “gtopo30” data). The value for the mid-path may be obtained from an area roughness with 0.5 × 0.5 degree resolution of geographical coordinates using bi-linear interpolation. """ if not self._s_a: vals = load_data(os.path.join(dataset_dir, 'p530/v16_gtopo_30.txt')) lats = load_data(os.path.join(dataset_dir, 'p530/v16_lat.txt')) lons = load_data(os.path.join(dataset_dir, 'p530/v16_lon.txt')) self._Pr6 = bilinear_2D_interpolator(lats, lons, vals) return self._Pr6(np.array([lat.ravel(), lon.ravel()]).T).reshape(lat.shape)
def Mt(self, lat, lon, m): if not self._Mt: lats = load_data(os.path.join(dataset_dir, 'p837/v7_LAT_MT.h5')) lons = load_data(os.path.join(dataset_dir, 'p837/v7_LON_MT.h5')) for _m in self.months: vals = load_data( os.path.join(dataset_dir, 'p837/v7_MT_Month{0:02d}.h5').format(_m)) self._Mt[_m] = bilinear_2D_interpolator( np.flipud(lats), lons, np.flipud(vals)) # In this recommendation the longitude is encoded with format -180 to # 180 whereas we always use 0 - 360 encoding lon = np.array(lon) lon[lon > 180] = lon[lon > 180] - 360 return self._Mt[m](np.array([lat.ravel(), lon.ravel()]).T).reshape(lat.shape)
def N_wet(self, lat, lon, p): if not self._N_wet: ps = [ 0.1, 0.2, 0.3, 0.5, 1, 2, 3, 5, 10, 20, 30, 50, 60, 70, 80, 90, 95, 99 ] d_dir = os.path.join(dataset_dir, 'p453/v13_NWET_Annual_%s.txt') lats = load_data(os.path.join(dataset_dir, 'p453/v13_LAT_N.txt')) lons = load_data(os.path.join(dataset_dir, 'p453/v13_LON_N.txt')) for p_loads in ps: vals = load_data(d_dir % (str(p_loads).replace('.', ''))) self._N_wet[float(p_loads)] = bilinear_2D_interpolator( np.flipud(lats), lons, np.flipud(vals)) lon[lon > 180] = lon[lon > 180] - 360 return self._N_wet[float(p)](np.array([lat.ravel(), lon.ravel() ]).T).reshape(lat.shape)
def DN65(self, lat, lon, p): if not self._DN65: ps = [ 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 95, 98, 99, 99.5, 99.8, 99.9 ] d_dir = os.path.join(dataset_dir, 'p453/v12_DN65m_%02dd%02d_v1.txt') lats = load_data(os.path.join(dataset_dir, 'p453/v12_lat0d75.txt')) lons = load_data(os.path.join(dataset_dir, 'p453/v12_lon0d75.txt')) for p_loads in ps: int_p = p_loads // 1 frac_p = round((p_loads % 1.0) * 100) vals = load_data(d_dir % (int_p, frac_p)) self._DN65[float(p_loads)] = bilinear_2D_interpolator( lats, lons, vals) return self._DN65[float(p)](np.array([lat.ravel(), lon.ravel() ]).T).reshape(lat.shape)