xref: /petsc/src/sys/tutorials/ex3f.F90 (revision 74df5e01f481fb3fe90b32c3b4345ef0122eb3ce)
1!
2!
3!   Description: Demonstrates how users can augment the PETSc profiling by
4!                nserting their own event logging.
5!
6! -----------------------------------------------------------------------
7
8program 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/deactivate 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
115end
116
117!
118!/*TEST
119!
120!   test:
121!     output_file: output/empty.out
122!
123!TEST*/
124