13444e80cSBarry Smith #include <petsc/private/petscimpl.h>
23444e80cSBarry Smith #include <petsc/private/bmimpl.h> /*I "petscbm.h" I*/
33444e80cSBarry Smith #include <petscviewer.h>
43444e80cSBarry Smith
53444e80cSBarry Smith PetscClassId BM_CLASSID;
63444e80cSBarry Smith static PetscBool PetscBenchPackageInitialized = PETSC_FALSE;
73444e80cSBarry Smith static PetscFunctionList PetscBenchList = NULL;
83444e80cSBarry Smith
93444e80cSBarry Smith // PetscClangLinter pragma disable: -fdoc-internal-linkage
103444e80cSBarry Smith /*@C
113444e80cSBarry Smith PetscBenchFinalizePackage - This function destroys everything in the `PetscBench` package. It is
123444e80cSBarry Smith called from `PetscFinalize()`.
133444e80cSBarry Smith
143444e80cSBarry Smith Level: developer
153444e80cSBarry Smith
163444e80cSBarry Smith .seealso: `PetscFinalize()`, `PetscBenchInitializePackage()`, `PetscBenchCreate()`, `PetscBench`, `PetscBenchType`
173444e80cSBarry Smith @*/
PetscBenchFinalizePackage(void)183444e80cSBarry Smith static PetscErrorCode PetscBenchFinalizePackage(void)
193444e80cSBarry Smith {
203444e80cSBarry Smith PetscFunctionBegin;
213444e80cSBarry Smith PetscCall(PetscFunctionListDestroy(&PetscBenchList));
223444e80cSBarry Smith PetscBenchPackageInitialized = PETSC_FALSE;
233444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
243444e80cSBarry Smith }
253444e80cSBarry Smith
263444e80cSBarry Smith /*@C
273444e80cSBarry Smith PetscBenchInitializePackage - This function initializes everything in the `PetscBench` package.
283444e80cSBarry Smith
293444e80cSBarry Smith Level: developer
303444e80cSBarry Smith
313444e80cSBarry Smith .seealso: `PetscInitialize()`, `PetscBenchCreate()`, `PetscBench`, `PetscBenchType`
323444e80cSBarry Smith @*/
PetscBenchInitializePackage(void)333444e80cSBarry Smith PetscErrorCode PetscBenchInitializePackage(void)
343444e80cSBarry Smith {
353444e80cSBarry Smith PetscFunctionBegin;
363444e80cSBarry Smith if (PetscBenchPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
373444e80cSBarry Smith PetscBenchPackageInitialized = PETSC_TRUE;
383444e80cSBarry Smith PetscCall(PetscClassIdRegister("PetscBench", &BM_CLASSID));
393444e80cSBarry Smith PetscCall(PetscRegisterFinalize(PetscBenchFinalizePackage));
403444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
413444e80cSBarry Smith }
423444e80cSBarry Smith
433444e80cSBarry Smith /*@C
443444e80cSBarry Smith PetscBenchRegister - Adds a benchmark test, `PetscBenchType`, to the `PetscBench` package
453444e80cSBarry Smith
46cc4c1da9SBarry Smith Not Collective, No Fortran Support
473444e80cSBarry Smith
483444e80cSBarry Smith Input Parameters:
493444e80cSBarry Smith + sname - name of a new benchmark
503444e80cSBarry Smith - function - routine to create benchmark
513444e80cSBarry Smith
523444e80cSBarry Smith Level: advanced
533444e80cSBarry Smith
543444e80cSBarry Smith Note:
553444e80cSBarry Smith `PetscBenchRegister()` may be called multiple times
563444e80cSBarry Smith
573444e80cSBarry Smith .seealso: `PetscBenchInitializePackage()`, `PetscBenchCreate()`, `PetscBench`, `PetscBenchType`, `PetscBenchSetType()`, `PetscBenchGetType()`
583444e80cSBarry Smith @*/
PetscBenchRegister(const char sname[],PetscErrorCode (* function)(PetscBench))593444e80cSBarry Smith PetscErrorCode PetscBenchRegister(const char sname[], PetscErrorCode (*function)(PetscBench))
603444e80cSBarry Smith {
613444e80cSBarry Smith PetscFunctionBegin;
623444e80cSBarry Smith PetscCall(PetscBenchInitializePackage());
633444e80cSBarry Smith PetscCall(PetscFunctionListAdd(&PetscBenchList, sname, function));
643444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
653444e80cSBarry Smith }
663444e80cSBarry Smith
67cc4c1da9SBarry Smith /*@
683444e80cSBarry Smith PetscBenchReset - removes all the intermediate data structures in a `PetscBench`
693444e80cSBarry Smith
703444e80cSBarry Smith Collective
713444e80cSBarry Smith
723444e80cSBarry Smith Input Parameter:
733444e80cSBarry Smith . bm - the `PetscBench`
743444e80cSBarry Smith
753444e80cSBarry Smith Level: advanced
763444e80cSBarry Smith
773444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchView()`, `PetscBenchSetFromOptions()`, `PetscBenchCreate()`, `PetscBenchDestroy()`, `PetscBenchSetUp()`, `PetscBenchSetType()`
783444e80cSBarry Smith @*/
PetscBenchReset(PetscBench bm)793444e80cSBarry Smith PetscErrorCode PetscBenchReset(PetscBench bm)
803444e80cSBarry Smith {
813444e80cSBarry Smith PetscFunctionBegin;
823444e80cSBarry Smith PetscValidHeaderSpecific(bm, BM_CLASSID, 1);
833444e80cSBarry Smith PetscCall(PetscLogHandlerDestroy(&bm->lhdlr)); // Temporarily here until PetscLogHandlerReset() exists
843444e80cSBarry Smith PetscTryTypeMethod(bm, reset);
853444e80cSBarry Smith bm->setupcalled = PETSC_FALSE;
863444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
873444e80cSBarry Smith }
883444e80cSBarry Smith
895d83a8b1SBarry Smith /*@
903444e80cSBarry Smith PetscBenchDestroy - Destroys a `PetscBench`
913444e80cSBarry Smith
923444e80cSBarry Smith Collective
933444e80cSBarry Smith
943444e80cSBarry Smith Input Parameter:
953444e80cSBarry Smith . bm - the `PetscBench`
963444e80cSBarry Smith
973444e80cSBarry Smith Level: advanced
983444e80cSBarry Smith
993444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchView()`, `PetscBenchSetFromOptions()`, `PetscBenchCreate()`
1003444e80cSBarry Smith @*/
PetscBenchDestroy(PetscBench * bm)1013444e80cSBarry Smith PetscErrorCode PetscBenchDestroy(PetscBench *bm)
1023444e80cSBarry Smith {
1033444e80cSBarry Smith PetscFunctionBegin;
1043444e80cSBarry Smith PetscAssertPointer(bm, 1);
1053444e80cSBarry Smith if (!*bm) PetscFunctionReturn(PETSC_SUCCESS);
106f4f49eeaSPierre Jolivet PetscValidHeaderSpecific(*bm, BM_CLASSID, 1);
107f4f49eeaSPierre Jolivet if (--((PetscObject)*bm)->refct > 0) {
1083444e80cSBarry Smith *bm = NULL;
1093444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
1103444e80cSBarry Smith }
1113444e80cSBarry Smith PetscCall(PetscBenchReset(*bm));
1123444e80cSBarry Smith PetscTryTypeMethod(*bm, destroy);
1133444e80cSBarry Smith PetscCall(PetscHeaderDestroy(bm));
1143444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
1153444e80cSBarry Smith }
1163444e80cSBarry Smith
1173444e80cSBarry Smith /*@
1183444e80cSBarry Smith PetscBenchSetUp - sets up the `PetscBench`
1193444e80cSBarry Smith
1203444e80cSBarry Smith Collective
1213444e80cSBarry Smith
1223444e80cSBarry Smith Input Parameter:
1233444e80cSBarry Smith . bm - the `PetscBench`
1243444e80cSBarry Smith
1253444e80cSBarry Smith Level: advanced
1263444e80cSBarry Smith
1273444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchView()`, `PetscBenchSetFromOptions()`, `PetscBenchCreate()`, `PetscBenchDestroy()`, `PetscBenchSetType()`,
1283444e80cSBarry Smith `PetscBenchRun()`, `PetscBenchSetSize()`, `PetscBenchGetSize()`
1293444e80cSBarry Smith @*/
PetscBenchSetUp(PetscBench bm)1303444e80cSBarry Smith PetscErrorCode PetscBenchSetUp(PetscBench bm)
1313444e80cSBarry Smith {
1323444e80cSBarry Smith PetscFunctionBegin;
1333444e80cSBarry Smith PetscValidHeaderSpecific(bm, BM_CLASSID, 1);
1343444e80cSBarry Smith if (bm->setupcalled) PetscFunctionReturn(PETSC_SUCCESS);
1353444e80cSBarry Smith PetscCall(PetscLogHandlerCreate(PETSC_COMM_WORLD, &bm->lhdlr)); // Temporarily here until PetscLogHandlerReset() exists
1363444e80cSBarry Smith PetscCall(PetscLogHandlerSetType(bm->lhdlr, PETSCLOGHANDLERDEFAULT));
1373444e80cSBarry Smith PetscTryTypeMethod(bm, setup);
1383444e80cSBarry Smith bm->setupcalled = PETSC_TRUE;
1393444e80cSBarry Smith PetscTryTypeMethod(bm, run);
1403444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
1413444e80cSBarry Smith }
1423444e80cSBarry Smith
1433444e80cSBarry Smith /*@
1443444e80cSBarry Smith PetscBenchRun - runs the `PetscBench`
1453444e80cSBarry Smith
1463444e80cSBarry Smith Collective
1473444e80cSBarry Smith
1483444e80cSBarry Smith Input Parameter:
1493444e80cSBarry Smith . bm - the `PetscBench`
1503444e80cSBarry Smith
1513444e80cSBarry Smith Level: advanced
1523444e80cSBarry Smith
1533444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchView()`, `PetscBenchSetFromOptions()`, `PetscBenchCreate()`, `PetscBenchDestroy()`, `PetscBenchSetUp()`, `PetscBenchSetType()`,
1543444e80cSBarry Smith `PetscBenchSetSize()`, `PetscBenchGetSize()`
1553444e80cSBarry Smith @*/
PetscBenchRun(PetscBench bm)1563444e80cSBarry Smith PetscErrorCode PetscBenchRun(PetscBench bm)
1573444e80cSBarry Smith {
1583444e80cSBarry Smith PetscFunctionBegin;
1593444e80cSBarry Smith PetscValidHeaderSpecific(bm, BM_CLASSID, 1);
1603444e80cSBarry Smith if (!bm->setupcalled) PetscCall(PetscBenchSetUp(bm));
1613444e80cSBarry Smith PetscCall(PetscLogHandlerStart(bm->lhdlr));
1623444e80cSBarry Smith PetscTryTypeMethod(bm, run);
1633444e80cSBarry Smith PetscCall(PetscLogHandlerStop(bm->lhdlr));
1643444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
1653444e80cSBarry Smith }
1663444e80cSBarry Smith
1673444e80cSBarry Smith /*@
1683444e80cSBarry Smith PetscBenchSetFromOptions - Sets options to a `PetscBench` using the options database
1693444e80cSBarry Smith
1703444e80cSBarry Smith Collective
1713444e80cSBarry Smith
1723444e80cSBarry Smith Input Parameter:
1733444e80cSBarry Smith . bm - the `PetscBench`
1743444e80cSBarry Smith
1753444e80cSBarry Smith Level: advanced
1763444e80cSBarry Smith
1773444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchView()`, `PetscBenchRun()`, `PetscBenchCreate()`, `PetscBenchDestroy()`, `PetscBenchSetUp()`, `PetscBenchSetType()`,
1783444e80cSBarry Smith `PetscBenchSetSize()`, `PetscBenchGetSize()`
1793444e80cSBarry Smith @*/
PetscBenchSetFromOptions(PetscBench bm)1803444e80cSBarry Smith PetscErrorCode PetscBenchSetFromOptions(PetscBench bm)
1813444e80cSBarry Smith {
1823444e80cSBarry Smith char type[256];
1833444e80cSBarry Smith PetscBool flg;
1843444e80cSBarry Smith PetscInt m;
1853444e80cSBarry Smith
1863444e80cSBarry Smith PetscFunctionBegin;
1873444e80cSBarry Smith PetscValidHeaderSpecific(bm, BM_CLASSID, 1);
1883444e80cSBarry Smith PetscObjectOptionsBegin((PetscObject)bm);
1893444e80cSBarry Smith PetscCall(PetscOptionsFList("-bm_type", "PetscBench", "PetscBenchSetType", PetscBenchList, ((PetscObject)bm)->type_name, type, sizeof(type), &flg));
190*3a7d0413SPierre Jolivet if (flg) PetscCall(PetscBenchSetType(bm, type));
1913444e80cSBarry Smith PetscCheck(((PetscObject)bm)->type_name, PetscObjectComm((PetscObject)bm), PETSC_ERR_ARG_WRONGSTATE, "No PetscBenchType provided for PetscBench");
1923444e80cSBarry Smith PetscCall(PetscOptionsInt("-bm_size", "Size of benchmark", "PetscBenchSetSize", bm->size, &m, &flg));
1933444e80cSBarry Smith if (flg) PetscCall(PetscBenchSetSize(bm, m));
1943444e80cSBarry Smith PetscTryTypeMethod(bm, setfromoptions, PetscOptionsObject);
1953444e80cSBarry Smith PetscOptionsEnd();
1963444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
1973444e80cSBarry Smith }
1983444e80cSBarry Smith
199ffeef943SBarry Smith /*@
2003444e80cSBarry Smith PetscBenchView - Views a PETSc benchmark `PetscBench`
2013444e80cSBarry Smith
2023444e80cSBarry Smith Collective
2033444e80cSBarry Smith
2043444e80cSBarry Smith Input Parameters:
2053444e80cSBarry Smith + bm - the `PetscBench`
2063444e80cSBarry Smith - viewer - location to view `bm`
2073444e80cSBarry Smith
2083444e80cSBarry Smith Level: advanced
2093444e80cSBarry Smith
2103444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchSetFromOptions()`, `PetscBenchRun()`, `PetscBenchCreate()`, `PetscBenchDestroy()`, `PetscBenchSetUp()`, `PetscBenchSetType()`,
2113444e80cSBarry Smith `PetscBenchSetSize()`, `PetscBenchGetSize()`, `PetscBenchViewFromOptions()`
2123444e80cSBarry Smith @*/
PetscBenchView(PetscBench bm,PetscViewer viewer)2133444e80cSBarry Smith PetscErrorCode PetscBenchView(PetscBench bm, PetscViewer viewer)
2143444e80cSBarry Smith {
2153444e80cSBarry Smith PetscFunctionBegin;
2163444e80cSBarry Smith PetscValidHeaderSpecific(bm, BM_CLASSID, 1);
2173444e80cSBarry Smith PetscValidHeaderSpecific(viewer, PETSC_VIEWER_CLASSID, 2);
2183444e80cSBarry Smith PetscTryTypeMethod(bm, view, viewer);
2193444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
2203444e80cSBarry Smith }
2213444e80cSBarry Smith
222ffeef943SBarry Smith /*@
2233444e80cSBarry Smith PetscBenchViewFromOptions - Processes command line options to determine if/how a `PetscBench` is to be viewed.
2243444e80cSBarry Smith
2253444e80cSBarry Smith Collective
2263444e80cSBarry Smith
2273444e80cSBarry Smith Input Parameters:
2283444e80cSBarry Smith + bm - the object
2293444e80cSBarry Smith . bobj - optional other object that provides prefix (if `NULL` then the prefix in `bm` is used)
2303444e80cSBarry Smith - optionname - option to activate viewing
2313444e80cSBarry Smith
2323444e80cSBarry Smith Level: advanced
2333444e80cSBarry Smith
2343444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchSetFromOptions()`, `PetscBenchRun()`, `PetscBenchCreate()`, `PetscBenchDestroy()`, `PetscBenchSetUp()`, `PetscBenchSetType()`,
2353444e80cSBarry Smith `PetscBenchSetSize()`, `PetscBenchGetSize()`
2363444e80cSBarry Smith @*/
PetscBenchViewFromOptions(PetscBench bm,PetscObject bobj,const char optionname[])2373444e80cSBarry Smith PetscErrorCode PetscBenchViewFromOptions(PetscBench bm, PetscObject bobj, const char optionname[])
2383444e80cSBarry Smith {
2393444e80cSBarry Smith PetscFunctionBegin;
2403444e80cSBarry Smith PetscValidHeaderSpecific(bm, BM_CLASSID, 1);
2413444e80cSBarry Smith PetscCall(PetscObjectViewFromOptions((PetscObject)bm, bobj, optionname));
2423444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
2433444e80cSBarry Smith }
2443444e80cSBarry Smith
245cc4c1da9SBarry Smith /*@
2463444e80cSBarry Smith PetscBenchCreate - Create a PETSc benchmark `PetscBench` object
2473444e80cSBarry Smith
2483444e80cSBarry Smith Collective
2493444e80cSBarry Smith
2503444e80cSBarry Smith Input Parameter:
2513444e80cSBarry Smith . comm - communicator to share the `PetscBench`
2523444e80cSBarry Smith
2533444e80cSBarry Smith Output Parameter:
2543444e80cSBarry Smith . bm - the `PetscBench`
2553444e80cSBarry Smith
2563444e80cSBarry Smith Level: advanced
2573444e80cSBarry Smith
2583444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchSetFromOptions()`, `PetscBenchRun()`, `PetscBenchViewFromOptions()`, `PetscBenchDestroy()`, `PetscBenchSetUp()`, `PetscBenchSetType()`,
2593444e80cSBarry Smith `PetscBenchSetSize()`, `PetscBenchGetSize()`
2603444e80cSBarry Smith @*/
PetscBenchCreate(MPI_Comm comm,PetscBench * bm)2613444e80cSBarry Smith PetscErrorCode PetscBenchCreate(MPI_Comm comm, PetscBench *bm)
2623444e80cSBarry Smith {
2633444e80cSBarry Smith PetscFunctionBegin;
2643444e80cSBarry Smith PetscAssertPointer(bm, 2);
2653444e80cSBarry Smith PetscCall(PetscBenchInitializePackage());
266377f809aSBarry Smith
2673444e80cSBarry Smith PetscCall(PetscHeaderCreate(*bm, BM_CLASSID, "BM", "PetscBench", "BM", comm, PetscBenchDestroy, PetscBenchView));
2683444e80cSBarry Smith (*bm)->size = PETSC_DECIDE;
2693444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
2703444e80cSBarry Smith }
2713444e80cSBarry Smith
272cc4c1da9SBarry Smith /*@
2733444e80cSBarry Smith PetscBenchSetOptionsPrefix - Sets the prefix used for searching for all `PetscBench` items in the options database.
2743444e80cSBarry Smith
2753444e80cSBarry Smith Logically Collective
2763444e80cSBarry Smith
2773444e80cSBarry Smith Input Parameters:
2783444e80cSBarry Smith + bm - the `PetscBench`
2793444e80cSBarry Smith - pre - the prefix to prepend all `PetscBench` option names
2803444e80cSBarry Smith
2813444e80cSBarry Smith Level: advanced
2823444e80cSBarry Smith
2833444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchSetFromOptions()`, `PetscBenchRun()`, `PetscBenchViewFromOptions()`, `PetscBenchDestroy()`, `PetscBenchSetUp()`, `PetscBenchSetType()`,
2843444e80cSBarry Smith `PetscBenchSetSize()`, `PetscBenchGetSize()`
2853444e80cSBarry Smith @*/
PetscBenchSetOptionsPrefix(PetscBench bm,const char pre[])2863444e80cSBarry Smith PetscErrorCode PetscBenchSetOptionsPrefix(PetscBench bm, const char pre[])
2873444e80cSBarry Smith {
2883444e80cSBarry Smith PetscFunctionBegin;
2893444e80cSBarry Smith PetscValidHeaderSpecific(bm, BM_CLASSID, 1);
2903444e80cSBarry Smith PetscCall(PetscObjectSetOptionsPrefix((PetscObject)bm, pre));
2913444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
2923444e80cSBarry Smith }
2933444e80cSBarry Smith
294cc4c1da9SBarry Smith /*@
2953444e80cSBarry Smith PetscBenchSetSize - Sets the size of the `PetscBench` benchmark to run
2963444e80cSBarry Smith
2973444e80cSBarry Smith Logically Collective
2983444e80cSBarry Smith
2993444e80cSBarry Smith Input Parameters:
3003444e80cSBarry Smith + bm - the `PetscBench`
3013444e80cSBarry Smith - n - the size
3023444e80cSBarry Smith
3033444e80cSBarry Smith Level: advanced
3043444e80cSBarry Smith
3053444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchSetFromOptions()`, `PetscBenchRun()`, `PetscBenchViewFromOptions()`, `PetscBenchDestroy()`, `PetscBenchSetUp()`, `PetscBenchSetType()`,
3063444e80cSBarry Smith `PetscBenchSetOptionsPrefix()`, `PetscBenchGetSize()`
3073444e80cSBarry Smith @*/
PetscBenchSetSize(PetscBench bm,PetscInt n)3083444e80cSBarry Smith PetscErrorCode PetscBenchSetSize(PetscBench bm, PetscInt n)
3093444e80cSBarry Smith {
3103444e80cSBarry Smith PetscFunctionBegin;
3113444e80cSBarry Smith PetscValidHeaderSpecific(bm, BM_CLASSID, 1);
3123444e80cSBarry Smith if (bm->size > 0 && bm->size != n && bm->setupcalled) {
3133444e80cSBarry Smith PetscCall(PetscBenchReset(bm));
3143444e80cSBarry Smith bm->setupcalled = PETSC_FALSE;
3153444e80cSBarry Smith }
3163444e80cSBarry Smith PetscCheck(n > 0, PetscObjectComm((PetscObject)bm), PETSC_ERR_ARG_OUTOFRANGE, "Illegal value of n. Must be > 0");
3173444e80cSBarry Smith bm->size = n;
3183444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
3193444e80cSBarry Smith }
3203444e80cSBarry Smith
321cc4c1da9SBarry Smith /*@
3223444e80cSBarry Smith PetscBenchGetSize - Gets the size of the `PetscBench` benchmark to run
3233444e80cSBarry Smith
3243444e80cSBarry Smith Logically Collective
3253444e80cSBarry Smith
3263444e80cSBarry Smith Input Parameter:
3273444e80cSBarry Smith . bm - the `PetscBench`
3283444e80cSBarry Smith
3293444e80cSBarry Smith Output Parameter:
3303444e80cSBarry Smith . n - the size
3313444e80cSBarry Smith
3323444e80cSBarry Smith Level: advanced
3333444e80cSBarry Smith
3343444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchSetFromOptions()`, `PetscBenchRun()`, `PetscBenchViewFromOptions()`, `PetscBenchDestroy()`, `PetscBenchSetUp()`, `PetscBenchSetType()`,
3353444e80cSBarry Smith `PetscBenchSetOptionsPrefix()`, `PetscBenchSetSize()`
3363444e80cSBarry Smith @*/
PetscBenchGetSize(PetscBench bm,PetscInt * n)3373444e80cSBarry Smith PetscErrorCode PetscBenchGetSize(PetscBench bm, PetscInt *n)
3383444e80cSBarry Smith {
3393444e80cSBarry Smith PetscFunctionBegin;
3403444e80cSBarry Smith PetscValidHeaderSpecific(bm, BM_CLASSID, 1);
3413444e80cSBarry Smith PetscAssertPointer(n, 2);
3423444e80cSBarry Smith *n = bm->size;
3433444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
3443444e80cSBarry Smith }
3453444e80cSBarry Smith
346cc4c1da9SBarry Smith /*@
3473444e80cSBarry Smith PetscBenchSetType - set the type of `PetscBench` benchmark to run
3483444e80cSBarry Smith
3493444e80cSBarry Smith Collective
3503444e80cSBarry Smith
3513444e80cSBarry Smith Input Parameters:
3523444e80cSBarry Smith + bm - the `PetscBench`
3533444e80cSBarry Smith - type - a known method
3543444e80cSBarry Smith
3553444e80cSBarry Smith Options Database Key:
3563444e80cSBarry Smith . -bm_type <type> - Sets `PetscBench` type
3573444e80cSBarry Smith
3583444e80cSBarry Smith Level: advanced
3593444e80cSBarry Smith
3603444e80cSBarry Smith Developer Note:
3613444e80cSBarry Smith `PetscBenchRegister()` is used to add new benchmark types
3623444e80cSBarry Smith
3633444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchSetFromOptions()`, `PetscBenchRun()`, `PetscBenchViewFromOptions()`, `PetscBenchDestroy()`, `PetscBenchSetUp()`, `PetscBenchGetSize()`,
3643444e80cSBarry Smith `PetscBenchSetOptionsPrefix()`, `PetscBenchSetSize()`, `PetscBenchGetType()`, `PetscBenchCreate()`
3653444e80cSBarry Smith @*/
PetscBenchSetType(PetscBench bm,PetscBenchType type)3663444e80cSBarry Smith PetscErrorCode PetscBenchSetType(PetscBench bm, PetscBenchType type)
3673444e80cSBarry Smith {
3683444e80cSBarry Smith PetscBool match;
3693444e80cSBarry Smith PetscErrorCode (*r)(PetscBench);
3703444e80cSBarry Smith
3713444e80cSBarry Smith PetscFunctionBegin;
3723444e80cSBarry Smith PetscValidHeaderSpecific(bm, BM_CLASSID, 1);
3733444e80cSBarry Smith PetscAssertPointer(type, 2);
3743444e80cSBarry Smith
3753444e80cSBarry Smith PetscCall(PetscObjectTypeCompare((PetscObject)bm, type, &match));
3763444e80cSBarry Smith if (match) PetscFunctionReturn(PETSC_SUCCESS);
3773444e80cSBarry Smith
3783444e80cSBarry Smith PetscCall(PetscFunctionListFind(PetscBenchList, type, &r));
3793444e80cSBarry Smith PetscCheck(r, PetscObjectComm((PetscObject)bm), PETSC_ERR_ARG_UNKNOWN_TYPE, "Unable to find requested PetscBench type %s", type);
3803444e80cSBarry Smith /* Destroy the previous private BM context */
3813444e80cSBarry Smith PetscTryTypeMethod(bm, destroy);
3823444e80cSBarry Smith bm->ops->destroy = NULL;
3833444e80cSBarry Smith bm->data = NULL;
3843444e80cSBarry Smith
3853444e80cSBarry Smith PetscCall(PetscFunctionListDestroy(&((PetscObject)bm)->qlist));
3863444e80cSBarry Smith /* Reinitialize function pointers in PetscBenchOps structure */
3873444e80cSBarry Smith PetscCall(PetscMemzero(bm->ops, sizeof(struct _PetscBenchOps)));
3883444e80cSBarry Smith
3893444e80cSBarry Smith PetscCall(PetscObjectChangeTypeName((PetscObject)bm, type));
3903444e80cSBarry Smith PetscCall((*r)(bm));
3913444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
3923444e80cSBarry Smith }
3933444e80cSBarry Smith
394cc4c1da9SBarry Smith /*@
3953444e80cSBarry Smith PetscBenchGetType - Gets the `PetscBenchType` (as a string) from the `PetscBench`
3963444e80cSBarry Smith context.
3973444e80cSBarry Smith
3983444e80cSBarry Smith Not Collective
3993444e80cSBarry Smith
4003444e80cSBarry Smith Input Parameter:
4013444e80cSBarry Smith . bm - the `PetscBench`
4023444e80cSBarry Smith
4033444e80cSBarry Smith Output Parameter:
4043444e80cSBarry Smith . type - name of benchmark method
4053444e80cSBarry Smith
4063444e80cSBarry Smith Level: intermediate
4073444e80cSBarry Smith
4083444e80cSBarry Smith .seealso: `PetscBench`, `PetscBenchType`, `PetscBenchSetType()`, `PetscBenchCreate()`
4093444e80cSBarry Smith @*/
PetscBenchGetType(PetscBench bm,PetscBenchType * type)4103444e80cSBarry Smith PetscErrorCode PetscBenchGetType(PetscBench bm, PetscBenchType *type)
4113444e80cSBarry Smith {
4123444e80cSBarry Smith PetscFunctionBegin;
4133444e80cSBarry Smith PetscValidHeaderSpecific(bm, BM_CLASSID, 1);
4143444e80cSBarry Smith PetscAssertPointer(type, 2);
4153444e80cSBarry Smith *type = ((PetscObject)bm)->type_name;
4163444e80cSBarry Smith PetscFunctionReturn(PETSC_SUCCESS);
4173444e80cSBarry Smith }
418