xref: /petsc/src/sys/tutorials/ex3f.F90 (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
1!
2!
3!   Description: Demonstrates how users can augment the PETSc profiling by
4!                nserting their own event logging.
5!
6! -----------------------------------------------------------------------
7
8      program main
9#include <petsc/finclude/petscsys.h>
10#include <petsc/finclude/petsclog.h>
11      use petscsys
12      implicit none
13
14!
15! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
16!                   Variable declarations
17! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
18!
19      PetscLogEvent USER_EVENT1,USER_EVENT2
20      PetscLogEvent USER_EVENT3,USER_EVENT4
21      PetscLogEvent USER_EVENT5,USER_EVENT6
22      PetscLogEvent USER_EVENT7,USER_EVENT8
23      PetscLogEvent USER_EVENT9
24      PetscClassId  classid
25      integer imax
26      PetscErrorCode ierr
27      parameter (imax = 10000)
28      PetscLogDouble onefp
29      parameter (onefp = 1.0d0)
30      PetscReal onereal,tenreal
31      parameter (onereal = 1.0, tenreal = 10.0)
32      PetscInt n
33!
34! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
35!                 Beginning of program
36! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
37
38      PetscCallA(PetscInitialize(ierr))
39
40!
41!     Create a new user-defined event.
42!      - Note that PetscLogEventRegister() returns to the user a unique
43!        integer event number, which should then be used for profiling
44!        the event via PetscLogEventBegin() and PetscLogEventEnd().
45!      - The user can also optionally log floating point operations
46!        with the routine PetscLogFlops().
47!
48      classid = 0
49      PetscCallA(PetscLogEventRegister('Event 1',classid,USER_EVENT1,ierr))
50      PetscCallA(PetscLogEventRegister('Event 2',classid,USER_EVENT2,ierr))
51      PetscCallA(PetscLogEventRegister('Event 3',classid,USER_EVENT3,ierr))
52      PetscCallA(PetscLogEventRegister('Event 4',classid,USER_EVENT4,ierr))
53      PetscCallA(PetscLogEventRegister('Event 5',classid,USER_EVENT5,ierr))
54      PetscCallA(PetscLogEventRegister('Event 6',classid,USER_EVENT6,ierr))
55      PetscCallA(PetscLogEventRegister('Event 7',classid,USER_EVENT7,ierr))
56      PetscCallA(PetscLogEventRegister('Event 8',classid,USER_EVENT8,ierr))
57      PetscCallA(PetscLogEventRegister('Event 9',classid,USER_EVENT9,ierr))
58      PetscCallA(PetscLogEventBegin(USER_EVENT1,ierr))
59      PetscCallA(PetscLogFlops(imax*onefp,ierr))
60      PetscCallA(PetscSleep(onereal,ierr))
61      PetscCallA(PetscLogEventEnd(USER_EVENT1,ierr))
62      PetscCallA(PetscLogEventBegin(USER_EVENT2,ierr))
63      PetscCallA(PetscLogFlops(imax*onefp,ierr))
64      PetscCallA(PetscSleep(onereal,ierr))
65      PetscCallA(PetscLogEventEnd(USER_EVENT2,ierr))
66      PetscCallA(PetscLogEventBegin(USER_EVENT3,ierr))
67      PetscCallA(PetscLogFlops(imax*onefp,ierr))
68      PetscCallA(PetscSleep(onereal,ierr))
69      PetscCallA(PetscLogEventEnd(USER_EVENT3,ierr))
70      PetscCallA(PetscLogEventBegin(USER_EVENT4,ierr))
71      PetscCallA(PetscLogFlops(imax*onefp,ierr))
72      PetscCallA(PetscSleep(onereal,ierr))
73      PetscCallA(PetscLogEventEnd(USER_EVENT4,ierr))
74      PetscCallA(PetscLogEventBegin(USER_EVENT5,ierr))
75      PetscCallA(PetscLogFlops(imax*onefp,ierr))
76      PetscCallA(PetscSleep(onereal,ierr))
77      PetscCallA(PetscLogEventEnd(USER_EVENT5,ierr))
78      PetscCallA(PetscLogEventBegin(USER_EVENT6,ierr))
79      PetscCallA(PetscLogFlops(imax*onefp,ierr))
80      PetscCallA(PetscSleep(onereal,ierr))
81      PetscCallA(PetscLogEventEnd(USER_EVENT6,ierr))
82      PetscCallA(PetscLogEventBegin(USER_EVENT7,ierr))
83      PetscCallA(PetscLogFlops(imax*onefp,ierr))
84      PetscCallA(PetscSleep(onereal,ierr))
85      PetscCallA(PetscLogEventEnd(USER_EVENT7,ierr))
86      PetscCallA(PetscLogEventBegin(USER_EVENT8,ierr))
87      PetscCallA(PetscLogFlops(imax*onefp,ierr))
88      PetscCallA(PetscSleep(onereal,ierr))
89      PetscCallA(PetscLogEventEnd(USER_EVENT8,ierr))
90      PetscCallA(PetscLogEventBegin(USER_EVENT9,ierr))
91      PetscCallA(PetscLogFlops(imax*onefp,ierr))
92      PetscCallA(PetscSleep(onereal,ierr))
93      PetscCallA(PetscLogEventEnd(USER_EVENT9,ierr))
94!
95!    We disable the logging of an event.
96!      - Note that the user can activate/deactive both user-defined
97!        events and predefined PETSc events.
98!
99      PetscCallA(PetscLogEventDeactivate(USER_EVENT1,ierr))
100      PetscCallA(PetscLogEventBegin(USER_EVENT1,ierr))
101      PetscCallA(PetscSleep(onereal,ierr))
102      PetscCallA(PetscLogEventEnd(USER_EVENT1,ierr))
103!
104!    We next enable the logging of an event
105!
106      PetscCallA(PetscLogEventActivate(USER_EVENT1,ierr))
107      PetscCallA(PetscLogEventBegin(USER_EVENT1,ierr))
108      PetscCallA(PetscSleep(onereal,ierr))
109      PetscCallA(PetscLogEventEnd(USER_EVENT1,ierr))
110
111      PetscCallA(PetscInfo('PETSc info message\n'//'Another line\n',ierr))
112      PetscCallA(PetscOptionsAllUsed(PETSC_NULL_OPTIONS,n,ierr));
113      PetscCallA(PetscFinalize(ierr))
114
115      end
116
117!
118!/*TEST
119!
120!   test:
121!
122!TEST*/
123