示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
    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)
示例#8
0
    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)
示例#9
0
    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)
示例#10
0
    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)
示例#11
0
    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)
示例#12
0
    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)
示例#13
0
    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)
示例#14
0
    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)