Actual source code: ex11f.F90
1: !
2: program main
3: #include <petsc/finclude/petscvec.h>
4: use petscvec
5: implicit none
7: Vec x
8: PetscReal norm
9: PetscBool flg
10: PetscMPIInt rank
11: PetscInt n, bs, comp
12: PetscErrorCode ierr
13: PetscScalar one
15: PetscCallA(PetscInitialize(ierr))
16: PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD, rank, ierr))
18: n = 20
19: one = 1.0
20: PetscCallA(PetscOptionsGetInt(PETSC_NULL_OPTIONS, PETSC_NULL_CHARACTER, '-n', n, flg, ierr))
22: !
23: ! Create a vector, specifying only its global dimension.
24: ! When using VecCreate(), VecSetSizes() and VecSetFromOptions(),
25: ! the vector format (currently parallel,
26: ! shared, or sequential) is determined at runtime. Also, the parallel
27: ! partitioning of the vector is determined by PETSc at runtime.
29: PetscCallA(VecCreate(PETSC_COMM_WORLD, x, ierr))
30: PetscCallA(VecSetSizes(x, PETSC_DECIDE, n, ierr))
31: bs = 2
32: PetscCallA(VecSetBlockSize(x, bs, ierr))
33: PetscCallA(VecSetFromOptions(x, ierr))
35: !
36: ! Set the vectors to entries to a constant value.
37: !
38: PetscCallA(VecSet(x, one, ierr))
40: PetscCallA(VecNorm(x, NORM_2, norm, ierr))
41: if (rank == 0) then
42: write (6, 100) norm
43: 100 format('L_2 Norm of entire vector ', 1pe9.2)
44: end if
46: comp = 0
47: PetscCallA(VecStrideNorm(x, comp, NORM_2, norm, ierr))
48: if (rank == 0) then
49: write (6, 200) norm
50: 200 format('L_2 Norm of subvector 0', 1pe9.2)
51: end if
53: comp = 1
54: PetscCallA(VecStrideNorm(x, comp, NORM_2, norm, ierr))
55: if (rank == 0) then
56: write (6, 300) norm
57: 300 format('L_2 Norm of subvector 1', 1pe9.2)
58: end if
60: PetscCallA(VecStrideNorm(x, comp, NORM_1, norm, ierr))
61: if (rank == 0) then
62: write (6, 400) norm
63: 400 format('L_1 Norm of subvector 0', 1pe9.2)
64: end if
66: PetscCallA(VecStrideNorm(x, comp, NORM_INFINITY, norm, ierr))
67: if (rank == 0) then
68: write (6, 500) norm
69: 500 format('L_1 Norm of subvector 1', 1pe9.2)
70: end if
72: !
73: ! Free work space. All PETSc objects should be destroyed when they
74: ! are no longer needed.
76: PetscCallA(VecDestroy(x, ierr))
77: PetscCallA(PetscFinalize(ierr))
78: end
80: !/*TEST
81: !
82: ! test:
83: ! nsize: 2
84: !
85: !TEST*/