Пример #1
0
    def test_rh_spec_humidity(self):
        """Tests specific humidity -> RH calculation
        
        Starting from an RH, an atmospheric pressure and temperature,
        calculate specific humidity. Then check to see if the tested code
        can reproduce the RH we started with. 
        """
        rh = 25 * u.pct
        p = 1 * u.bar
        t = 25 * u.deg_C

        e_sat = vp.calc_vp(t)
        w_sat = m.mixing_ratio(e_sat, p)

        w = rh * w_sat  # get vapor pressure from definition of RH
        e = p * w / (m.EPSILON + w)  # mixing ratio solved for e

        # calculate specific humidity using eq 2.19
        q = m.EPSILON * (e / (p - (1 - m.EPSILON) * e))

        rh_test = m.calc_rh_spec_humidity(q, p, t)

        self.assertTrue(np.abs(rh - rh_test) < 0.1 * u.pct,
                        msg="test RH: {:3.1} ; calculated RH: {:3.1}".format(
                            rh, rh_test))
Пример #2
0
 def compute_rh(self) : 
     """Compute RH for the current utc day
     
     This calls "next()" on the internal RH object. No need to manage it."""
     bufs = self.get_buffer_group()
     derived = self.get_derived_buffers()
     if "rh" in derived.group : 
         # one day big
         p = bufs.get('PSurf').get_utc_day()
         q = bufs.get('Qair').get_utc_day()
         t = bufs.get('Tair').get_utc_day()
         rh = derived.get('rh')
         rh.source = met.calc_rh_spec_humidity(q,p,t)
         rh.next()
     else :
         # 2 days big
         p = bufs.get('PSurf').get_buffer()
         q = bufs.get('Qair').get_buffer()
         t = bufs.get('Tair').get_buffer()
         rh = derived.create_computed("rh",met.calc_rh_spec_humidity(q,p,t), 
                 u.pct)
         
     return rh
Пример #3
0
    def compute_rh(self):
        """Compute RH for the current utc day
        
        This calls "next()" on the internal RH object. No need to manage it."""
        bufs = self.get_buffer_group()
        derived = self.get_derived_buffers()
        if "rh" in derived.group:
            # one day big
            p = bufs.get('PSurf').get_utc_day()
            q = bufs.get('Qair').get_utc_day()
            t = bufs.get('Tair').get_utc_day()
            rh = derived.get('rh')
            rh.source = met.calc_rh_spec_humidity(q, p, t)
            rh.next()
        else:
            # 2 days big
            p = bufs.get('PSurf').get_buffer()
            q = bufs.get('Qair').get_buffer()
            t = bufs.get('Tair').get_buffer()
            rh = derived.create_computed("rh",
                                         met.calc_rh_spec_humidity(q, p, t),
                                         u.pct)

        return rh
Пример #4
0
    def test_rh_spec_humidity(self) : 
        """Tests specific humidity -> RH calculation
        
        Starting from an RH, an atmospheric pressure and temperature,
        calculate specific humidity. Then check to see if the tested code
        can reproduce the RH we started with. 
        """
        rh = 25 * u.pct
        p =  1 * u.bar
        t =  25 * u.deg_C
        
        e_sat = vp.calc_vp(t)
        w_sat = m.mixing_ratio(e_sat, p)
        
        w = rh * w_sat          # get vapor pressure from definition of RH
        e = p*w/(m.EPSILON + w) # mixing ratio solved for e
        
        # calculate specific humidity using eq 2.19
        q = m.EPSILON * (e/(p-(1-m.EPSILON)*e))

        rh_test = m.calc_rh_spec_humidity(q, p, t)
        
        self.assertTrue(np.abs(rh-rh_test) < 0.1 * u.pct,
          msg="test RH: {:3.1} ; calculated RH: {:3.1}".format(rh, rh_test))