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