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