Example #1
0
    def _solve_p_corr(self):
        self.uf[:, :], self.vf[:, :], df = self._rhie_chow_interpolate_faces(self.u, self.v, self.p)

        mass_source = Source(self.grid.core_shape)
        mass_source.b[:, :] = self.rho*np.sum((self.uf*self.grid.core_face_norms[:, :, :, 0] + self.vf*self.grid.core_face_norms[:, :, :, 1]), dtype=float, axis=-1)

        self.p_corr_eqn == (DiffusionTerm(self.grid, df, self.rho) == mass_source)
        self.p_corr_eqn.iterative_solve(maxiter=100, tol=1e-4)

        self._correct(df)
Example #2
0
    def _solve_momentum(self):
        u_source = Source(self.grid.core_shape)
        v_source = Source(self.grid.core_shape)

        pf = self._interpolate_faces(self.p)
        self.dp_x[1:-1, 1:-1], self.dp_y[1:-1, 1:-1] = self._compute_gradient(pf)

        u_source.b[:, :] = -self.areas*self.dp_x[1:-1, 1:-1]
        v_source.b[:, :] = -self.areas*self.dp_y[1:-1, 1:-1]

        self.u_eqn == (AdvectionTerm(self.grid, self.uf, self.vf, self.rho, scheme=self.adv_scheme) - self.laplacian == u_source)
        self.v_eqn == (AdvectionTerm(self.grid, self.uf, self.vf, self.rho, scheme=self.adv_scheme) - self.laplacian == v_source)

        self.u_eqn.relax(self.omega_momentum)
        self.v_eqn.relax(self.omega_momentum)

        self.u_eqn.iterative_solve(maxiter=20)
        self.v_eqn.iterative_solve(maxiter=20)