Example #1
0
    def get_mb(self, heights, year=None):
        """Returns the mass-balance at given altitudes
        for a given moment in time."""

        y, m = utils.year_to_date(year)

        pok = np.where((self.years == y) & (self.months == m))[0][0]

        # Read timeseries
        itemp = self.temp[pok]
        iprcp = self.prcp[pok]
        igrad = self.grad[pok]

        # For each height pixel:
        # Compute temp and tempformelt (temperature above melting threshold)
        npix = len(heights)
        grad_temp = igrad * (heights - self.ref_hgt)
        temp = np.ones(npix) * itemp + grad_temp
        tempformelt = temp - self.temp_melt
        tempformelt = np.clip(tempformelt, 0, tempformelt.max())

        # Compute solid precipitation from total precipitation
        prcpsol = np.ones(npix) * iprcp
        fac = 1 - (temp - self.temp_all_solid) / \
                  (self.temp_all_liq - self.temp_all_solid)
        prcpsol *= np.clip(fac, 0, 1)

        mb_month = prcpsol - self.mu_star * tempformelt
        return mb_month / SEC_IN_MONTHS[m-1] / cfg.RHO
Example #2
0
    def get_monthly_mb(self, heights, year=None):

        y, m = utils.year_to_date(year)
        pok = np.where((self.years == y) & (self.months == m))[0][0]

        # Read timeseries
        itemp = self.temp[pok] + self.temp_bias
        iprcp = self.prcp[pok]
        igrad = self.grad[pok]

        # For each height pixel:
        # Compute temp and tempformelt (temperature above melting threshold)
        npix = len(heights)
        temp = np.ones(npix) * itemp + igrad * (heights - self.ref_hgt)
        tempformelt = temp - self.t_melt
        tempformelt[:] = np.clip(tempformelt, 0, tempformelt.max())

        # Compute solid precipitation from total precipitation
        prcpsol = np.ones(npix) * iprcp
        fac = 1 - (temp - self.t_solid) / (self.t_liq - self.t_solid)
        prcpsol *= np.clip(fac, 0, 1)

        mb_month = prcpsol - self.mu_star * tempformelt - \
                   self.bias * SEC_IN_MONTHS[m-1] / SEC_IN_YEAR
        return mb_month / SEC_IN_MONTHS[m - 1] / cfg.RHO
Example #3
0
    def get_mb(self, heights, year=None):
        """Returns the mass-balance at given altitudes
        for a given moment in time."""

        y, m = utils.year_to_date(year)

        pok = np.where((self.years == y) & (self.months == m))[0][0]

        # Read timeseries
        itemp = self.temp[pok]
        iprcp = self.prcp[pok]
        igrad = self.grad[pok]

        # For each height pixel:
        # Compute temp and tempformelt (temperature above melting threshold)
        npix = len(heights)
        grad_temp = igrad * (heights - self.ref_hgt)
        temp = np.ones(npix) * itemp + grad_temp
        tempformelt = temp - self.temp_melt
        tempformelt = np.clip(tempformelt, 0, tempformelt.max())

        # Compute solid precipitation from total precipitation
        prcpsol = np.ones(npix) * iprcp
        fac = 1 - (temp - self.temp_all_solid) / \
                  (self.temp_all_liq - self.temp_all_solid)
        prcpsol *= np.clip(fac, 0, 1)

        mb_month = prcpsol - self.mu_star * tempformelt
        return mb_month / SEC_IN_MONTHS[m - 1] / cfg.RHO
Example #4
0
    def get_monthly_mb(self, heights, year=None):

        y, m = utils.year_to_date(year)
        pok = np.where((self.years == y) & (self.months == m))[0][0]

        # Read timeseries
        itemp = self.temp[pok] + self.temp_bias
        iprcp = self.prcp[pok]
        igrad = self.grad[pok]

        # For each height pixel:
        # Compute temp and tempformelt (temperature above melting threshold)
        npix = len(heights)
        temp = np.ones(npix) * itemp + igrad * (heights - self.ref_hgt)
        tempformelt = temp - self.t_melt
        tempformelt[:] = np.clip(tempformelt, 0, tempformelt.max())

        # Compute solid precipitation from total precipitation
        prcpsol = np.ones(npix) * iprcp
        fac = 1 - (temp - self.t_solid) / (self.t_liq - self.t_solid)
        prcpsol *= np.clip(fac, 0, 1)

        mb_month = prcpsol - self.mu_star * tempformelt - \
                   self.bias * SEC_IN_MONTHS[m-1] / SEC_IN_YEAR
        return mb_month / SEC_IN_MONTHS[m-1] / cfg.RHO
Example #5
0
    def test_date_to_year(self):

        r = utils.date_to_year(0, 1)
        self.assertEqual(r, 0)

        r = utils.date_to_year(1, 1)
        self.assertEqual(r, 1)

        r = utils.date_to_year([0, 1], [1, 1])
        np.testing.assert_array_equal(r, [0, 1])

        yr = utils.date_to_year([1998, 1998], [6, 7])
        y, m = utils.year_to_date(yr)
        np.testing.assert_array_equal(y, [1998, 1998])
        np.testing.assert_array_equal(m, [6, 7])

        yr = utils.date_to_year([1998, 1998], [2, 3])
        y, m = utils.year_to_date(yr)
        np.testing.assert_array_equal(y, [1998, 1998])
        np.testing.assert_array_equal(m, [2, 3])

        time = pd.date_range('1/1/1800', periods=300*12, freq='MS')
        yr = utils.date_to_year(time.year, time.month)
        y, m = utils.year_to_date(yr)
        np.testing.assert_array_equal(y, time.year)
        np.testing.assert_array_equal(m, time.month)

        myr = utils.monthly_timeseries(1800, 2099)
        y, m = utils.year_to_date(myr)
        np.testing.assert_array_equal(y, time.year)
        np.testing.assert_array_equal(m, time.month)

        myr = utils.monthly_timeseries(1800, ny=300)
        y, m = utils.year_to_date(myr)
        np.testing.assert_array_equal(y, time.year)
        np.testing.assert_array_equal(m, time.month)

        with self.assertRaises(ValueError):
            utils.monthly_timeseries(1)
Example #6
0
    def test_year_to_date(self):

        r = utils.year_to_date(0)
        self.assertEqual(r, (0, 1))

        y, m = utils.year_to_date([0, 1])
        np.testing.assert_array_equal(y, [0, 1])
        np.testing.assert_array_equal(m, [1, 1])

        y, m = utils.year_to_date([0.00001, 1.00001])
        np.testing.assert_array_equal(y, [0, 1])
        np.testing.assert_array_equal(m, [1, 1])

        y, m = utils.year_to_date([0.99999, 1.99999])
        np.testing.assert_array_equal(y, [0, 1])
        np.testing.assert_array_equal(m, [12, 12])

        yr = 1998 + cfg.CUMSEC_IN_MONTHS[2] / cfg.SEC_IN_YEAR
        r = utils.year_to_date(yr)
        self.assertEqual(r, (1998, 4))

        yr = 1998 + (cfg.CUMSEC_IN_MONTHS[2] - 1) / cfg.SEC_IN_YEAR
        r = utils.year_to_date(yr)
        self.assertEqual(r, (1998, 3))
Example #7
0
 def get_monthly_mb(self, heights, year=None):
     ryr, m = utils.year_to_date(year)
     ryr = utils.date_to_year(self.get_state_yr(ryr), m)
     return self.mbmod.get_monthly_mb(heights, year=ryr)
Example #8
0
 def get_monthly_mb(self, heights, year=None):
     yr, m = utils.year_to_date(year)
     return self.interp_m[m - 1](heights)
Example #9
0
 def get_monthly_mb(self, heights, year=None):
     ryr, m = utils.year_to_date(year)
     ryr = utils.date_to_year(self.get_state_yr(ryr), m)
     return self.mbmod.get_monthly_mb(heights, year=ryr)
Example #10
0
 def get_monthly_mb(self, heights, year=None):
     yr, m = utils.year_to_date(year)
     return self.interp_m[m-1](heights)