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