Actual source code: xmlviewer.c
1: /*************************************************************************************
2: * M A R I T I M E R E S E A R C H I N S T I T U T E N E T H E R L A N D S *
3: *************************************************************************************
4: * authors: Koos Huijssen, Christiaan M. Klaij *
5: *************************************************************************************
6: * content: Viewer for writing XML output *
7: *************************************************************************************/
8: #include <petscviewer.h>
9: #include <petsc/private/logimpl.h>
10: #include <petsc/private/fortranimpl.h>
11: #include "../src/sys/logging/xmlviewer.h"
13: #if defined(PETSC_USE_LOG)
15: static int XMLSectionDepth = 0;
17: PetscErrorCode PetscViewerXMLStartSection(PetscViewer viewer, const char *name, const char *desc)
18: {
19: if (!desc) {
20: PetscViewerASCIIPrintf(viewer, "%*s<%s>\n", XMLSectionDepth, "", name);
21: } else {
22: PetscViewerASCIIPrintf(viewer, "%*s<%s desc=\"%s\">\n", XMLSectionDepth, "", name, desc);
23: }
24: XMLSectionDepth += 2;
25: return 0;
26: }
28: /* Initialize a viewer to XML, and initialize the XMLDepth static parameter */
29: PetscErrorCode PetscViewerInitASCII_XML(PetscViewer viewer)
30: {
31: MPI_Comm comm;
32: char PerfScript[PETSC_MAX_PATH_LEN + 40];
34: PetscObjectGetComm((PetscObject)viewer, &comm);
35: PetscViewerASCIIPrintf(viewer, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
36: PetscStrreplace(comm, "<?xml-stylesheet type=\"text/xsl\" href=\"performance_xml2html.xsl\"?>", PerfScript, sizeof(PerfScript));
37: PetscViewerASCIIPrintf(viewer, "%s\n", PerfScript);
38: XMLSectionDepth = 0;
39: PetscViewerXMLStartSection(viewer, "root", NULL);
40: return 0;
41: }
43: /* Initialize a viewer to XML, and initialize the XMLDepth static parameter */
44: PetscErrorCode PetscViewerFinalASCII_XML(PetscViewer viewer)
45: {
46: PetscViewerXMLEndSection(viewer, "root");
47: return 0;
48: }
50: PetscErrorCode PetscViewerXMLEndSection(PetscViewer viewer, const char *name)
51: {
52: XMLSectionDepth -= 2;
53: if (XMLSectionDepth < 0) XMLSectionDepth = 0;
54: PetscViewerASCIIPrintf(viewer, "%*s</%s>\n", XMLSectionDepth, "", name);
55: return 0;
56: }
58: PetscErrorCode PetscViewerXMLPutString(PetscViewer viewer, const char *name, const char *desc, const char *value)
59: {
60: if (!desc) {
61: PetscViewerASCIIPrintf(viewer, "%*s<%s>%s</%s>\n", XMLSectionDepth, "", name, value, name);
62: } else {
63: PetscViewerASCIIPrintf(viewer, "%*s<%s desc=\"%s\">%s</%s>\n", XMLSectionDepth, "", name, desc, value, name);
64: }
65: return 0;
66: }
68: PetscErrorCode PetscViewerXMLPutInt(PetscViewer viewer, const char *name, const char *desc, int value)
69: {
70: if (!desc) {
71: PetscViewerASCIIPrintf(viewer, "%*s<%s>%d</%s>\n", XMLSectionDepth, "", name, value, name);
72: } else {
73: PetscViewerASCIIPrintf(viewer, "%*s<%s desc=\"%s\">%d</%s>\n", XMLSectionDepth, "", name, desc, value, name);
74: }
75: return 0;
76: }
78: PetscErrorCode PetscViewerXMLPutDouble(PetscViewer viewer, const char *name, const char *desc, PetscLogDouble value, const char *format)
79: {
80: char buffer[1024];
82: if (!desc) {
83: PetscSNPrintf(buffer, sizeof(buffer), "%*s<%s>%s</%s>\n", XMLSectionDepth, "", name, format, name);
84: } else {
85: PetscSNPrintf(buffer, sizeof(buffer), "%*s<%s desc=\"%s\">%s</%s>\n", XMLSectionDepth, "", name, desc, format, name);
86: }
87: PetscViewerASCIIPrintf(viewer, buffer, value);
88: return 0;
89: }
91: #endif