18{
19 PetscSession::getInstance(argc,argv);
20
21 PetscPrintf(PETSC_COMM_WORLD, "\n=== Vector: A distributed (complex) example =========\n\n");
22
23 std::size_t Nx(801);
24 std::size_t Ny(801);
25 std::size_t N(Nx*Ny);
26 double deltax = 1.0/(Nx-1);
27 double deltaxSq = deltax*deltax;
28 double deltay = 1.0/(Ny-1);
29 double deltaySq = deltay*deltay;
30 DistributedMatrix<D_complex> matA( N, N, 5, 4 );
31 DistributedVector<D_complex> vecB( N );
32
33 for(std::size_t j = 0; j < Ny; ++j ) {
34 matA.set_elt(j,j,1.0);
35 vecB.set_elt(j,0.0);
36 }
37
38 for(std::size_t i = 1; i < Nx-1; ++i ) {
39 matA.set_elt( i*Ny, i*Ny, 1.0 );
40 vecB.set_elt( i*Ny, 0.0 );
41 for(std::size_t j = 1; j < Ny-1; ++j ) {
47 value.
push_back( -2.0/deltaySq - 2.0/deltaxSq);
54 matA.set_row( i*Ny+j, index, value );
55 vecB.set_elt( i*Ny+j, 1.0 );
56 }
57 matA.set_elt( i*Ny+Ny-1, i*Ny+Ny-1, 1.0 );
58 vecB.set_elt( i*Ny+Ny-1, 0.0 );
59 }
60 for(std::size_t j = 0; j < Ny; ++j ) {
61 matA.set_elt( Ny*(Nx-1) + j , Ny*(Nx-1) + j, 1.0 );
62 vecB.set_elt( Ny*(Nx-1) + j, 0.0 );
63 }
64
65 matA.final_assembly();
66 vecB.final_assembly();
67
68
69
70
71 DistributedLinearSystem<D_complex> system( &matA, &vecB );
72 system.solve();
73
74 cout << vecB.two_norm() << "\n";
75
76
77
78}
An DenseVector class – a dense vector object.
void push_back(const _Type &fill)
A pass-thru definition of push_back.