def test_tppcd_shell_with_chebyshev_iteration(self):
        ''' Test for the lsc operator shell '''
        Qp_visc = LAT.petsc_load_matrix(os.path.join(self._scriptdir,'import_modules/Qp_visc.bin'))
        Qp_dens = LAT.petsc_load_matrix(os.path.join(self._scriptdir,'import_modules/Qp_dens.bin'))
        Ap_rho = LAT.petsc_load_matrix(os.path.join(self._scriptdir, 'import_modules/Ap_rho.bin'))
        Np_rho = LAT.petsc_load_matrix(os.path.join(self._scriptdir, 'import_modules/Np_rho.bin'))
        alpha = True
        delta_t = 0.001
        x_vec = LAT.petsc_load_vector(os.path.join(self._scriptdir,'import_modules/input_vec_tppcd.bin'))

        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_ksp_type','preonly')
        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_ksp_constant_null_space', '')
        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_pc_type','hypre')
        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_pc_hypre_type','boomeramg')
        TPPCD_shell = LAT.TwoPhase_PCDInv_shell(Qp_visc,
                                                Qp_dens,
                                                Ap_rho,
                                                Np_rho,
                                                alpha,
                                                delta_t,
                                                5,
                                                laplace_null_space=True)
        y_vec = x_vec.copy()
        y_vec.zeroEntries()
        A = None
        TPPCD_shell.apply(A,x_vec,y_vec)
        true_solu = LAT.petsc_load_vector(os.path.join(self._scriptdir, 'import_modules/tp_pcd_y_output.bin'))
        assert np.allclose(y_vec.getArray(),true_solu.getArray())
Exemple #2
0
    def test_tppcd_shell(self):
        ''' Test for the lsc operator shell '''
        Qp_visc = LAT.petsc_load_matrix(
            os.path.join(self._scriptdir, 'import_modules/Qp_visc'))
        Qp_dens = LAT.petsc_load_matrix(
            os.path.join(self._scriptdir, 'import_modules/Qp_dens'))
        Ap_rho = LAT.petsc_load_matrix(
            os.path.join(self._scriptdir, 'import_modules/Ap_rho'))
        Np_rho = LAT.petsc_load_matrix(
            os.path.join(self._scriptdir, 'import_modules/Np_rho'))
        alpha = True
        delta_t = 0.001
        x_vec = LAT.petsc_load_vector(
            os.path.join(self._scriptdir, 'import_modules/input_vec_tppcd'))

        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_ksp_type',
                                    'preonly')
        self.petsc_options.setValue(
            'innerTPPCDsolver_Ap_rho_ksp_constant_null_space', '')
        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_pc_type', 'hypre')
        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_pc_hypre_type',
                                    'boomeramg')
        TPPCD_shell = LAT.TwoPhase_PCDInv_shell(Qp_visc, Qp_dens, Ap_rho,
                                                Np_rho, alpha, delta_t, 5)
        y_vec = x_vec.copy()
        y_vec.zeroEntries()
        A = None
        TPPCD_shell.apply(A, x_vec, y_vec)
        true_solu = LAT.petsc_load_vector(
            os.path.join(self._scriptdir, 'import_modules/tp_pcd_y_output'))
        assert np.allclose(y_vec.getArray(), true_solu.getArray())
Exemple #3
0
    def test_tppcd_shell_with_dirichlet_pressure(self):
        ''' Test for the lsc operator shell '''
        Qp_visc = LAT.petsc_load_matrix(
            os.path.join(self._scriptdir, 'import_modules/Qp_visc.bin'))
        Qp_dens = LAT.petsc_load_matrix(
            os.path.join(self._scriptdir, 'import_modules/Qp_dens.bin'))
        Ap_rho = LAT.petsc_load_matrix(
            os.path.join(self._scriptdir, 'import_modules/Ap_rho.bin'))
        Np_rho = LAT.petsc_load_matrix(
            os.path.join(self._scriptdir, 'import_modules/Np_rho.bin'))
        alpha = True
        delta_t = 0.001
        x_vec = LAT.petsc_load_vector(
            os.path.join(self._scriptdir,
                         'import_modules/input_vec_tppcd.bin'))

        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_ksp_type',
                                    'preonly')
        self.petsc_options.setValue(
            'innerTPPCDsolver_Ap_rho_ksp_constant_null_space', '')
        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_pc_type', 'hypre')
        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_pc_hypre_type',
                                    'boomeramg')

        dirichlet_nodes = [3, 12, 15, 21, 33]
        TPPCD_shell = LAT.TwoPhase_PCDInv_shell(
            Qp_visc,
            Qp_dens,
            Ap_rho,
            Np_rho,
            alpha=alpha,
            delta_t=delta_t,
            num_chebyshev_its=5,
            strong_dirichlet_DOF=dirichlet_nodes)
        # Test the index set is set correctly
        unknown_indices = np.arange(TPPCD_shell.getSize())
        known_indices_mask = np.ones(TPPCD_shell.getSize(), dtype=bool)
        known_indices_mask[dirichlet_nodes] = False
        unknown_is = unknown_indices[known_indices_mask]
        assert np.array_equal(unknown_is,
                              TPPCD_shell.unknown_dof_is.getIndices())

        y_vec = x_vec.copy()
        y_vec.zeroEntries()
        A = None
        TPPCD_shell.apply(A, x_vec, y_vec)
        assert np.array_equal(y_vec[dirichlet_nodes], [0., 0., 0., 0., 0.])
        true_solu = LAT.petsc_load_vector(
            os.path.join(self._scriptdir,
                         'import_modules/tppcd_y_dirichlet_dof.bin'))
        assert np.allclose(y_vec.getArray(), true_solu.getArray())
def test_petsc_load_vec(tmpdir):
    """test petsc_load_matrix """
    from petsc4py import PETSc as p4pyPETSc
    from proteus import LinearAlgebraTools as LAT

    vals_A = np.array([5.5, 7.1, 1.0])
    A = p4pyPETSc.Vec()
    A.createWithArray(vals_A)

    A_tmp = tmpdir.join('A.petsc_vec')
    LAT._petsc_view(A, A_tmp.strpath)
    A_test = LAT.petsc_load_vector(A_tmp.strpath)
    vec_values = A_test.getArray()

    assert np.allclose(vec_values, vals_A)

    A_test = LAT.petsc_load_vector('dne.txt')
    assert A_test is None
def test_petsc_load_vec(tmpdir):
    """test petsc_load_matrix """
    from petsc4py import PETSc as p4pyPETSc
    from proteus import LinearAlgebraTools as LAT

    vals_A = np.array([5.5,7.1,1.0])
    A = p4pyPETSc.Vec()
    A.createWithArray(vals_A)

    A_tmp = tmpdir.join('A.petsc_vec')
    LAT._petsc_view(A,A_tmp.strpath)
    A_test = LAT.petsc_load_vector(A_tmp.strpath)
    vec_values = A_test.getArray()

    assert np.allclose(vec_values, vals_A)

    A_test = LAT.petsc_load_vector('dne.txt')
    assert A_test is None
    def test_tppcd_shell_with_dirichlet_pressure(self):
        ''' Test for the lsc operator shell '''
        Qp_visc = LAT.petsc_load_matrix(os.path.join(self._scriptdir,'import_modules/Qp_visc.bin'))
        Qp_dens = LAT.petsc_load_matrix(os.path.join(self._scriptdir,'import_modules/Qp_dens.bin'))
        Ap_rho = LAT.petsc_load_matrix(os.path.join(self._scriptdir, 'import_modules/Ap_rho.bin'))
        Np_rho = LAT.petsc_load_matrix(os.path.join(self._scriptdir, 'import_modules/Np_rho.bin'))
        alpha = True
        delta_t = 0.001
        x_vec = LAT.petsc_load_vector(os.path.join(self._scriptdir,'import_modules/input_vec_tppcd.bin'))

        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_ksp_type','preonly')
        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_ksp_constant_null_space', '')
        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_pc_type','hypre')
        self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_pc_hypre_type','boomeramg')

        dirichlet_nodes = [3, 12, 15, 21, 33]
        TPPCD_shell = LAT.TwoPhase_PCDInv_shell(Qp_visc,
                                                Qp_dens,
                                                Ap_rho,
                                                Np_rho,
                                                alpha = alpha,
                                                delta_t = delta_t,
                                                num_chebyshev_its = 5,
                                                strong_dirichlet_DOF = dirichlet_nodes)
        # Test the index set is set correctly
        unknown_indices = np.arange(TPPCD_shell.getSize())
        known_indices_mask = np.ones(TPPCD_shell.getSize(),dtype=bool)
        known_indices_mask[dirichlet_nodes] = False
        unknown_is = unknown_indices[known_indices_mask]
        assert np.array_equal(unknown_is, TPPCD_shell.unknown_dof_is.getIndices())

        y_vec = x_vec.copy()
        y_vec.zeroEntries()
        A = None
        TPPCD_shell.apply(A,x_vec,y_vec)
        assert np.array_equal(y_vec[dirichlet_nodes], [0.,0.,0.,0.,0.])
        true_solu = LAT.petsc_load_vector(os.path.join(self._scriptdir,
                                                       'import_modules/tppcd_y_dirichlet_dof.bin'))
        assert np.allclose(y_vec.getArray(),true_solu.getArray())
Exemple #7
0
 def test_tppcd_shell_with_chebyshev_iteration(self):
     ''' Test for the lsc operator shell '''
     Qp_visc = LAT.petsc_load_matrix(
         os.path.join(self._scriptdir, 'import_modules/Qp_visc.bin'))
     Qp_dens = LAT.petsc_load_matrix(
         os.path.join(self._scriptdir, 'import_modules/Qp_dens.bin'))
     Ap_rho = LAT.petsc_load_matrix(
         os.path.join(self._scriptdir, 'import_modules/Ap_rho.bin'))
     Np_rho = LAT.petsc_load_matrix(
         os.path.join(self._scriptdir, 'import_modules/Np_rho.bin'))
     alpha = True
     delta_t = 0.001
     x_vec = LAT.petsc_load_vector(
         os.path.join(self._scriptdir,
                      'import_modules/input_vec_tppcd.bin'))
     self.petsc_options.clear()
     self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_ksp_type',
                                 'preonly')
     self.petsc_options.setValue(
         'innerTPPCDsolver_Ap_rho_ksp_constant_null_space', '')
     self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_pc_type', 'hypre')
     self.petsc_options.setValue('innerTPPCDsolver_Ap_rho_pc_hypre_type',
                                 'boomeramg')
     TPPCD_shell = LAT.TwoPhase_PCDInv_shell(Qp_visc,
                                             Qp_dens,
                                             Ap_rho,
                                             Np_rho,
                                             alpha,
                                             delta_t,
                                             5,
                                             laplace_null_space=True)
     y_vec = x_vec.copy()
     y_vec.zeroEntries()
     A = None
     TPPCD_shell.apply(A, x_vec, y_vec)
     #np.savetxt(os.path.join(self._scriptdir,'comparison_files/tp_pcd_y_output_cheb.csv'),y_vec.getArray(),delimiter=',')
     true_solu = np.loadtxt(os.path.join(
         self._scriptdir, 'comparison_files/tp_pcd_y_output_cheb.csv'),
                            delimiter=',')
     np.testing.assert_allclose(y_vec.getArray(),
                                true_solu,
                                rtol=1e-8,
                                atol=1e-8)