SALSA Analysis Modules
Functions
petsc.c File Reference
#include <stdlib.h>
#include <petscoptions.h>
#include <petsc.h>
#include "nmd.h"
#include "anamod.h"
#include "anamodsalsamodules.h"
Include dependency graph for petsc.c:

Go to the source code of this file.

Functions

static PetscErrorCode get_matrix (Mat *A, PetscTruth *success)
PetscErrorCode analyze_matrix (Mat A, NMD_metadata nmd)
static PetscErrorCode usage (MPI_Comm comm)
int main (int argc, char **argv)

Function Documentation

PetscErrorCode analyze_matrix ( Mat  A,
NMD_metadata  nmd 
)

Definition at line 47 of file petsc.c.

References CategoryGetModules(), ComputeQuantity(), GetDataType(), GetFirstCategory(), and GetNextCategory().

Referenced by main().

{
  const char *cat,**modules;
  AnalysisDataType *types; int imod,nmod;
  PetscTruth success; PetscErrorCode ierr;

  PetscFunctionBegin;
  ierr = GetFirstCategory(&cat,&success); CHKERRQ(ierr);
  while (success) {
    ierr = CategoryGetModules
      (cat,&modules,&types,PETSC_NULL,&nmod); CHKERRQ(ierr);
    for (imod=0; imod<nmod; imod++) {
      AnalysisItem res; int reslen; PetscTruth success;
      ierr = ComputeQuantity
        ((AnaModNumericalProblem)A,cat,modules[imod],
         &res,&reslen,&success); CHKERRQ(ierr);
      if (success) {
        AnalysisDataType type;
        ierr = GetDataType(cat,modules[imod],&type,PETSC_NULL); CHKERRQ(ierr);
        ierr = NMDSetArrayValue
          (nmd,cat,modules[imod],type,(void*)&res,reslen); CHKERRQ(ierr);
      }
    }
    ierr = GetNextCategory(&cat,&success); CHKERRQ(ierr);
  }
  PetscFunctionReturn(0);
}

Here is the call graph for this function:

static PetscErrorCode get_matrix ( Mat *  A,
PetscTruth *  success 
) [static]

Definition at line 14 of file petsc.c.

Referenced by main().

{
  MPI_Comm comm = MPI_COMM_WORLD; char option[1000];
  PetscTruth has; PetscViewer binary_dump; PetscErrorCode ierr;

  PetscFunctionBegin;
  *success = PETSC_FALSE;

  ierr = PetscOptionsGetString
    (PETSC_NULL,"-petsc",option,1000,&has); CHKERRQ(ierr);
  if (has) {
    PetscPrintf(comm,"reading matrix from petsc dump <%s>\n",option);
    ierr = PetscViewerBinaryOpen
      (comm,option,FILE_MODE_READ,&binary_dump); CHKERRQ(ierr);
    ierr = MatLoad(binary_dump,MATSEQAIJ,A); CHKERRQ(ierr);
    ierr = PetscViewerDestroy(binary_dump); CHKERRQ(ierr);
    *success = PETSC_TRUE; goto exit;
  }

  ierr = PetscOptionsGetString
    (PETSC_NULL,"-matrixmarket",option,1000,&has); CHKERRQ(ierr);
  if (has) {
    PetscPrintf(comm,"matrix market read not yet supported\n");
    *success = PETSC_FALSE; goto exit;
  }
  
 exit:
  CHKMEMQ;
  PetscFunctionReturn(0);
}
int main ( int  argc,
char **  argv 
)

Definition at line 90 of file petsc.c.

References analyze_matrix(), AnaModDeregisterSalsaModules(), AnaModFinalize(), AnaModGetTypeMySQLName(), AnaModInitialize(), AnaModOptionsHandling(), AnaModRegisterSalsaModules(), CategoryGetModules(), get_matrix(), GetCategories(), and usage().

{
  MPI_Comm comm; Mat A; NMD_metadata nmd; PetscTruth table,success,help;
  PetscErrorCode ierr;

  PetscFunctionBegin;
  PetscInitialize(&argc,&argv,0,0);
  comm = MPI_COMM_WORLD;

  help = PETSC_FALSE;
  ierr = PetscOptionsHasName(PETSC_NULL,"-h",&help); CHKERRQ(ierr);
  if (!help) {
    ierr = PetscOptionsHasName(PETSC_NULL,"-help",&help); CHKERRQ(ierr);
  }
  if (help) {
    ierr = usage(comm); CHKERRQ(ierr);
    goto petscfinalize;
  }

  ierr = AnaModInitialize(); CHKERRQ(ierr);
  ierr = AnaModRegisterSalsaModules(); CHKERRQ(ierr);
  ierr = AnaModOptionsHandling(); CHKERRQ(ierr);

  ierr = PetscOptionsHasName(PETSC_NULL,"-table",&table); CHKERRQ(ierr);
  if (table) {
    printf("CREATE TABLE anamod_data (\n");
    {
      int ncat, icat,iwrite=0; const char **cats;
      ierr = GetCategories(&ncat,&cats); CHKERRQ(ierr);
      for (icat=0; icat<ncat; icat++) {
        int ncmp,icmp; const char **cmps; AnalysisDataType *types;
        ierr = CategoryGetModules
          (cats[icat],&cmps,&types,NULL,&ncmp); CHKERRQ(ierr);
        for (icmp=0; icmp<ncmp; icmp++) {
          const char *type;
          if (iwrite>0) printf(",\n"); iwrite++;
          ierr = AnaModGetTypeMySQLName(types[icmp],&type); CHKERRQ(ierr);
          printf("  `%s:%s` %s",cats[icat],cmps[icmp],type);
          
        }
      }
    }
#if defined(HAVE_MYSQL)
/*   dbase = mysql_init(NULL); */
/*   mysql_real_connect(dbase,MYSQLHOST,MYSQLUSER,MYSQLPASS,MYSQLDBASE, */
/*                   0,NULL,0); */
#endif
    printf("\n)\n");
  }
  ierr = get_matrix(&A,&success); CHKERRQ(ierr);
  if (!success) goto exit;

  ierr = NMDCreateObject(&nmd); CHKERRQ(ierr);
  ierr = analyze_matrix(A,nmd); CHKERRQ(ierr);
  ierr = NMDViewObject(nmd); CHKERRQ(ierr);
  ierr = NMDObjectDumpToMySQL(nmd); CHKERRQ(ierr);
/*   { */
/*     char *key,*val; */
/*     ierr = NMDReportObject */
/*       (nmd,NMDFalse,&key,&val,'\t',0,0); CHKERRQ(ierr); */
/*     printf("Keys: %s\nValues: %s\n",key,val); */
/*     //NMD_FREE(key); NMD_FREE(val); */
/*   } */
  ierr = NMDDestroyObject(nmd); CHKERRQ(ierr);

 exit:
#if defined(HAVE_MYSQL)
  mysql_close(dbase);
#endif
  ierr = AnaModDeregisterSalsaModules(); CHKERRQ(ierr);
  ierr = AnaModFinalize(); CHKERRQ(ierr);
 petscfinalize:
  PetscFinalize();
  PetscFunctionReturn(0);
}

Here is the call graph for this function:

static PetscErrorCode usage ( MPI_Comm  comm) [static]

Definition at line 75 of file petsc.c.

Referenced by main().

{
  PetscErrorCode ierr;
  PetscFunctionBegin;
  ierr = PetscPrintf
    (comm,"-------------------------------------------------\n"); CHKERRQ(ierr);
  ierr = PetscPrintf
    (comm,"Use -petsc or -matrixmarket option to specify a matrix\n");
  ierr = PetscPrintf
    (comm,"Use -mysql to get a table definition and insert command for all computed quantities\n");
  PetscFunctionReturn(0);
}