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