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/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 115 end 116 117! 118!/*TEST 119! 120! test: 121! 122!TEST*/ 123