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())
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())
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())
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)