Exemple #1
0
    def advance_parcel_vars(self):
        dt = self.core.dt
        qv = self['qv'][0]
        T = self['T'][0]
        p = self['p'][0]
        t = self['t'][0]

        rho = p / phys.R(qv) / T
        pd = p * (1 - 1 / (1 + const.eps / qv))

        # mid-point value for w
        dz_dt = self.w(t + dt / 2)

        # Explicit Euler for p,T (predictor step assuming dq=0)
        dp_dt = -rho * const.g * dz_dt
        dpd_dt = dp_dt  # dq=0
        dT_dt = dp_dt / rho / phys.c_p(qv)

        self._tmp['t'][:] += dt
        self._tmp['z'][:] += dt * dz_dt
        self._tmp['rhod'][:] += dt * (dpd_dt / const.Rd / T +
                                      -dT_dt * pd / const.Rd / T**2)

        rhod_mean = (self._tmp['rhod'][0] + self["rhod"][0]) / 2
        self.mesh.dv = self.mass_of_dry_air / rhod_mean
Exemple #2
0
    def rhod(self, zZ):
        Z = self.size[1]
        z = zZ * Z  # :)

        # hydrostatic profile
        kappa = const.Rd / const.c_pd
        arg = np.power(
            self.p0 / const.p1000,
            kappa) - z * kappa * const.g / self.th_std0 / phys.R(self.qv0)
        p = const.p1000 * np.power(arg, 1 / kappa)

        # density using "dry" potential temp.
        pd = p * (1 - self.qv0 / (self.qv0 + const.eps))
        rhod = pd / (np.power(p / const.p1000, kappa) * const.Rd *
                     self.th_std0)

        return rhod