SALSA Analysis Modules
Defines | Functions | Variables
module_functions.c File Reference

User functions for accessing the analysis modules. More...

#include <stdlib.h>
#include <string.h>
#include "anamod.h"
#include "anamodsalsamodules.h"
Include dependency graph for module_functions.c:

Go to the source code of this file.

Defines

#define MODE_RETRIEVE   1
#define MODE_COMPUTE   0

Functions

PetscErrorCode AnaModInitialize ()
PetscErrorCode AnaModFinalize ()
PetscErrorCode AnaModGetTypeName (int id, const char **name)
PetscErrorCode AnaModGetTypeMySQLName (int id, const char **name)
PetscErrorCode RegisterModule (const char *cat, const char *cmp, AnalysisDataType type, PetscErrorCode(*f)(AnaModNumericalProblem, AnalysisItem *, int *, PetscBool *))
PetscErrorCode DeRegisterCategory (const char *cat)
PetscErrorCode DeregisterModules ()
PetscErrorCode HasComputeCategory (const char *cat, PetscBool *f)
PetscErrorCode HasComputeModule (const char *cat, const char *cmp, PetscBool *f)
static PetscErrorCode ComputeOrRetrieveQuantity (AnaModNumericalProblem prob, const char *cat, const char *cmp, AnalysisItem *res, int *rreslen, PetscBool *success, int mode)
PetscErrorCode ComputeQuantity (AnaModNumericalProblem prob, const char *cat, const char *cmp, AnalysisItem *res, int *rreslen, PetscBool *success)
PetscErrorCode RetrieveQuantity (AnaModNumericalProblem prob, const char *cat, const char *cmp, AnalysisItem *res, int *rreslen, PetscBool *success)
PetscErrorCode GetDataID (const char *cat, const char *cmp, int *id, PetscBool *f)
PetscErrorCode GetDataType (const char *cat, const char *cmp, AnalysisDataType *t, PetscBool *f)
PetscErrorCode HasQuantity (AnaModNumericalProblem prob, const char *cat, const char *cmp, PetscBool *f)
PetscErrorCode HasQuantityByID (AnaModNumericalProblem prob, int id, AnalysisDataType type, PetscBool *f)
PetscErrorCode RetrieveQuantityByID (AnaModNumericalProblem prob, int id, AnalysisDataType type, AnalysisItem *result, PetscBool *f)
PetscErrorCode QuantityAsString (AnalysisItem *q, AnalysisDataType t, char **s)

Variables

struct {
   int   id
   const char *   name
   const char *   mysqlname
anamodtypenames [5]
static int nAnaModTypeNames
static int AnaModIsInitialized = 0
int ncategories = 0
categoryobjectcategoryobjects = NULL

Detailed Description

User functions for accessing the analysis modules.

\ Analysis modules need to be defined with RegisterModule(), after which they can be invoked with ComputeQuantity(). See also HasQuantity(). The functions AnaModRegisterStandardModules() installs all standard available modules.

There are utility functions for querying the existence of modules: GetCategories(), CategoryGetModules(), HasComputeCategory(), HasComputeModule().

Utility functions: QuantityAsString(), GetDataType(), GetDataID(), GetCategoryIndex(), GetModuleIndex().

Definition in file module_functions.c.


Define Documentation

#define MODE_COMPUTE   0

Definition at line 477 of file module_functions.c.

Referenced by ComputeOrRetrieveQuantity(), and ComputeQuantity().

#define MODE_RETRIEVE   1

Definition at line 476 of file module_functions.c.

Referenced by ComputeOrRetrieveQuantity(), and RetrieveQuantity().


Function Documentation

PetscErrorCode AnaModFinalize ( )

Finalization for AnaMod. See also AnaModInitialize()

Definition at line 318 of file module_functions.c.

References FreeCategoryObjects().

Referenced by main().

{
  PetscErrorCode ierr;
  PetscFunctionBegin;
  ierr = FreeCategoryObjects(); CHKERRQ(ierr);
  PetscFunctionReturn(0);
}

Here is the call graph for this function:

PetscErrorCode AnaModGetTypeMySQLName ( int  id,
const char **  name 
)

Definition at line 344 of file module_functions.c.

References AnaModIsInitialized, anamodtypenames, mysqlname, and nAnaModTypeNames.

Referenced by main().

{
  int i;
  PetscFunctionBegin;
  if (AnaModIsInitialized<1) 
      SETERRQ(MPI_COMM_WORLD,1,"AnaMod has not been not formally initialized.\nInsert a call to AnaModInitialize() in your code");
  for (i=0; i<nAnaModTypeNames; i++) {
    if (id==anamodtypenames[i].id) {
      *name = (char*)anamodtypenames[i].mysqlname; goto exit;
    }
  }
  SETERRQ1(MPI_COMM_WORLD,1,"Unknown AnaMod datatype %d",id);
 exit:
  PetscFunctionReturn(0);
}
PetscErrorCode AnaModGetTypeName ( int  id,
const char **  name 
)

Definition at line 328 of file module_functions.c.

References anamodtypenames, and nAnaModTypeNames.

{
  int i;
  PetscFunctionBegin;
  for (i=0; i<nAnaModTypeNames; i++) {
    if (id==anamodtypenames[i].id) {
      *name = (char*)anamodtypenames[i].name; goto exit;
    }
  }
  SETERRQ1(MPI_COMM_WORLD,1,"Unknown AnaMod datatype %d",id);
 exit:
  PetscFunctionReturn(0);
}
PetscErrorCode AnaModInitialize ( )

Initializatin for AnaMod. See also AnaModFinalize()

Definition at line 284 of file module_functions.c.

References AllocCategoryObjects(), AnaModIsInitialized, anamodtypenames, and nAnaModTypeNames.

Referenced by main().

{
  PetscErrorCode ierr;

  PetscFunctionBegin;
  ierr = AllocCategoryObjects(); CHKERRQ(ierr);

  anamodtypenames[0].id = NMDString;
  anamodtypenames[0].name="string"; 
  anamodtypenames[0].mysqlname="VARCHAR(256)";

  anamodtypenames[1].id = NMDInt;
  anamodtypenames[1].name="int"; 
  anamodtypenames[1].mysqlname="INTEGER";

  anamodtypenames[2].id = NMDReal;
  anamodtypenames[2].name="real"; 
  anamodtypenames[2].mysqlname="DOUBLE";

  anamodtypenames[3].id = NMDIntarray;
  anamodtypenames[3].name="intarray"; 
  anamodtypenames[3].mysqlname="VARCHAR(1024)";

  anamodtypenames[4].id = NMDRealarray;
  anamodtypenames[4].name="realarray";
  anamodtypenames[4].mysqlname="VARCHAR(1024)";

  AnaModIsInitialized = 1; nAnaModTypeNames = 5;
  PetscFunctionReturn(0);
}

Here is the call graph for this function:

static PetscErrorCode ComputeOrRetrieveQuantity ( AnaModNumericalProblem  prob,
const char *  cat,
const char *  cmp,
AnalysisItem res,
int *  rreslen,
PetscBool *  success,
int  mode 
) [static]

Definition at line 481 of file module_functions.c.

References ANALYSISINTARRAY, AnaModHasTrace(), AnaModTraceArrays(), AnaModTraceMessage(), CategoryGetComponent(), ComponentCompute(), ComponentGetType(), ComponentRetrieve(), GetCategory(), MODE_COMPUTE, MODE_RETRIEVE, and QuantityAsString().

Referenced by ComputeQuantity(), and RetrieveQuantity().

{
  categoryobject catg; componentobject cmpt; PetscBool flg,trace;
  int reslen; PetscErrorCode ierr;
  
  PetscFunctionBegin;
  ierr = AnaModHasTrace(&trace); CHKERRQ(ierr);

  /*
   * Get the module and compute
   */
  ierr = GetCategory(cat,&catg,&flg); CHKERRQ(ierr);
  if (!flg) SETERRQ1(MPI_COMM_WORLD,1,"Could not find category <%s>",cat);
  ierr = CategoryGetComponent(catg,cmp,&cmpt,&flg); CHKERRQ(ierr);
  if (!flg) SETERRQ1(MPI_COMM_WORLD,1,"Could not find component <%s>",cmp);
  if (mode==MODE_COMPUTE) {
    ierr = ComponentCompute(cmpt,prob,res,&reslen,&flg); CHKERRQ(ierr);
  } else if (mode==MODE_RETRIEVE) {
    ierr = ComponentRetrieve(cmpt,prob,res,&reslen,&flg); CHKERRQ(ierr);
  } else   SETERRQ(MPI_COMM_WORLD,1,"Invalid mode");

  if (rreslen) *rreslen = reslen;
  if (success) *success = flg;

  /*
   * Tracing
   */
  if (trace) {
    if (flg) {
      char *string; PetscBool trace_arrays; AnalysisDataType t;

      ierr = ComponentGetType(cmpt,&t); CHKERRQ(ierr);
      ierr = AnaModTraceArrays(&trace_arrays); CHKERRQ(ierr);
      if (t<ANALYSISINTARRAY || trace_arrays) {
        ierr = QuantityAsString(res,t,(const char**)&string); CHKERRQ(ierr);
        ierr = AnaModTraceMessage
          ("Anamod computed <%s:%s> = <%s>\n",cat,cmp,string); CHKERRQ(ierr);
        ierr = PetscFree(string); CHKERRQ(ierr);
      }
    } else {
      ierr = AnaModTraceMessage
        ("Anamod failed to compute <%s:%s>\n",cat,cmp); CHKERRQ(ierr);
    }
  }

  PetscFunctionReturn(0);
}

Here is the call graph for this function:

PetscErrorCode ComputeQuantity ( AnaModNumericalProblem  prob,
const char *  cat,
const char *  cmp,
AnalysisItem res,
int *  rreslen,
PetscBool *  success 
)

Compute a computational module from a certain category.

Argument:

  1. the name of the category (see GetCategories())
  2. the name of the module (see CategoryGetModules())
  3. the matrix
  4. a pointer to the result. This is given as "(AnalysisItem*)&res" ; see types for the definition of the AnalysisItem data type
  5. the length of the result if the result is an array. This argument can be NULL.
  6. a success indicator. Failure can have obvious causes, such as breakdown of an internal routine, but the routine can also refuse to compute a quantity if doing so would be too expensive (see an example in the Estimates for the departure from normality category).

A call to this routine need not involve actual computation: the requested quantity can already be attached to the matrix object (see attached quantities for details). This mechanism is used in all the standard modules that come with the AnaMod package.

The workings of this function can be traced by specifying a trace function; see Tracing the analysis modules.

Definition at line 558 of file module_functions.c.

References AnaModIsInitialized, ComputeOrRetrieveQuantity(), and MODE_COMPUTE.

Referenced by analyze_matrix(), DepartureRuhe75(), LoBand(), MatrixComputeQuantity(), MaxEVbyImIm(), MaxEVbyImRe(), MaxEVbyMagIm(), MaxEVbyMagRe(), MaxEVbyRealIm(), MaxEVbyRealRe(), MinEVbyMagIm(), MinEVbyMagRe(), RelSymm(), and UpBand().

{
  PetscErrorCode ierr;
  PetscFunctionBegin;
  if (!AnaModIsInitialized)
      SETERRQ(MPI_COMM_WORLD,1,"AnaMod not initialized: insert call to AnaModInitialize()\n");
  ierr = ComputeOrRetrieveQuantity
    (prob,cat,cmp,res,rreslen,success,MODE_COMPUTE); CHKERRQ(ierr);
  PetscFunctionReturn(0);
}

Here is the call graph for this function:

PetscErrorCode DeRegisterCategory ( const char *  cat)

Deallocate the storage for a particular category of analysis modules. No longer needed.

Definition at line 409 of file module_functions.c.

{
/*   categoryobject catg; */
/*   PetscBool flg; PetscErrorCode ierr; */
  PetscFunctionBegin;

  printf("Please remove use of legacy function DeRegisterCategory\n");
/*   ierr = GetCategory(cat,&catg,&flg); CHKERRQ(ierr); */
/*   if (!flg) SETERRQ1(MPI_COMM_WORLD,1,"Invalid category <%s>",cat); */
/*   ierr = DestroyCategoryObject(catg); CHKERRQ(ierr); */
  PetscFunctionReturn(0);
}
PetscErrorCode DeregisterModules ( void  )

This function is no longer needed

Definition at line 425 of file module_functions.c.

{
/*   int icat,ncat; const char **cat; */
/*   PetscErrorCode ierr; */
  PetscFunctionBegin;
  printf("Please remove use of legacy function DeRegisterModules\n");
/*   ierr = GetCategories(&ncat,&cat); CHKERRQ(ierr); */
/*   for (icat=0; icat<ncat; icat++) { */
/*     ierr = DeRegisterCategory(cat[icat]); CHKERRQ(ierr); */
/*   } */
  PetscFunctionReturn(0);
}
PetscErrorCode GetDataID ( const char *  cat,
const char *  cmp,
int *  id,
PetscBool *  f 
)

Definition at line 589 of file module_functions.c.

References CategoryGetComponent(), ComponentGetId(), and GetCategory().

Referenced by AvgDiagDist(), AvgNnzpRow(), BlockSize(), ColourOffsets(), Colours(), ColourSizes(), ColVariability(), Commutator(), compute_dd(), compute_dummy_rows(), compute_eigenvalues(), compute_ellipse_from_Ritz_values(), compute_icm_splits(), compute_nnz_structure(), compute_posdiag(), compute_singularvalues(), compute_tracea2(), ComputeDiagonal(), computennz(), computetrace(), ComputeVariability(), Departure(), DepartureLee95(), DepartureLee96L(), DepartureLee96U(), DepartureRuhe75(), DiagDefinite(), DiagonalAverage(), DiagonalDominance(), DiagonalSign(), DiagonalVariance(), DiagZeroStart(), DummyRows(), DummyRowsKind(), eigenvaluecomp(), JonesPlassmannColouring(), Kappa(), LBandWidth(), Lee95bounds(), Lee96bounds(), LeftSkyline(), LoBand(), MatCommutatorNormF(), MatSymmPartNormInf(), MaxEVbyImIm(), MaxEVbyImRe(), MaxEVbyMagIm(), MaxEVbyMagRe(), MaxEVbyRealIm(), MaxEVbyRealRe(), MaxNNonZerosPerRow(), MinEVbyMagIm(), MinEVbyMagRe(), MinNNonZerosPerRow(), NColours(), NDiags(), NDummyRows(), NNonZeros(), Nnz(), NnzDia(), NnzLow(), NnzUp(), norm1(), normF(), normInf(), NRitzValues(), nRows(), NSplits(), NUnstruct(), PosFraction(), RBandWidth(), regularblocks(), RelSymm(), RightSkyline(), RitzValuesC(), RitzValuesR(), RowVariability(), SigmaDiagDist(), SigmaMax(), SigmaMin(), SpectrumAX(), SpectrumAY(), SpectrumCX(), SpectrumCY(), Splits(), Symmetry(), SymmetryANorm(), SymmetryFANorm(), SymmetryFSNorm(), SymmetrySNorm(), Trace(), TraceA2(), TraceAbs(), UpBand(), and Version().

 {
   categoryobject catg; componentobject cmpt; PetscBool flg;
  PetscErrorCode ierr;
  PetscFunctionBegin;
  ierr = GetCategory(cat,&catg,&flg); CHKERRQ(ierr);
  if (!flg) {
    if (!f)   SETERRQ(MPI_COMM_WORLD,1,"Could not find cat/cmp, but no flag to report this");
    *f = PETSC_FALSE; PetscFunctionReturn(0);
  }
  ierr = CategoryGetComponent(catg,cmp,&cmpt,&flg); CHKERRQ(ierr);
  if (!flg) {
    if (!f)   SETERRQ(MPI_COMM_WORLD,1,"Could not find cat/cmp, but no flag to report this");
    *f = PETSC_FALSE; PetscFunctionReturn(0);
  }
  ierr = ComponentGetId(cmpt,id); CHKERRQ(ierr);
  if (f) *f = PETSC_TRUE;
  PetscFunctionReturn(0);
}

Here is the call graph for this function:

PetscErrorCode GetDataType ( const char *  cat,
const char *  cmp,
AnalysisDataType t,
PetscBool *  f 
)

Definition at line 612 of file module_functions.c.

References CategoryGetComponent(), ComponentGetType(), and GetCategory().

Referenced by analyze_matrix().

{
  categoryobject catg; componentobject cmpt; PetscBool flg;
  PetscErrorCode ierr;
  PetscFunctionBegin;
  ierr = GetCategory(cat,&catg,&flg); CHKERRQ(ierr);
  if (!flg) {
    if (!f)   SETERRQ(MPI_COMM_WORLD,1,"Could not find cat/cmp, but no flag to report this");
    *f = PETSC_FALSE; PetscFunctionReturn(0);
  }
  ierr = CategoryGetComponent(catg,cmp,&cmpt,&flg); CHKERRQ(ierr);
  if (!flg) {
    if (!f)   SETERRQ(MPI_COMM_WORLD,1,"Could not find cat/cmp, but no flag to report this");
    *f = PETSC_FALSE; PetscFunctionReturn(0);
  }
  ierr = ComponentGetType(cmpt,t); CHKERRQ(ierr);
  if (f) *f = PETSC_TRUE;
  PetscFunctionReturn(0);
}

Here is the call graph for this function:

PetscErrorCode HasComputeCategory ( const char *  cat,
PetscBool *  f 
)

Query whether a specified category has been declared.

Definition at line 451 of file module_functions.c.

References GetCategory().

{
  PetscErrorCode ierr;
  PetscFunctionBegin;
  ierr = GetCategory(cat,PETSC_NULL,f); CHKERRQ(ierr);
  PetscFunctionReturn(0);
}

Here is the call graph for this function:

PetscErrorCode HasComputeModule ( const char *  cat,
const char *  cmp,
PetscBool *  f 
)

Query whether a specified module exists inside a specified category. The category need not itself have been declared.

Definition at line 465 of file module_functions.c.

References CategoryGetComponent(), and GetCategory().

Referenced by LoBand(), and UpBand().

{
  categoryobject catg; PetscErrorCode ierr;
  PetscFunctionBegin;
  ierr = GetCategory(cat,&catg,f); CHKERRQ(ierr);
  if (*f) {
    ierr = CategoryGetComponent(catg,cmp,PETSC_NULL,f); CHKERRQ(ierr);
  }
  PetscFunctionReturn(0);
}

Here is the call graph for this function:

PetscErrorCode HasQuantity ( AnaModNumericalProblem  prob,
const char *  cat,
const char *  cmp,
PetscBool *  f 
)

Check if a certain quantity is precomputed, meaning that it can be retrieved (with a call to ComputeQuantity()) at no computational cost.

The category and module names have to exist. Use HasComputeModule() to test whether a category and module is known to the system.

See the page on attached quantities for an explanation of the mechanism behind this routine.

Definition at line 646 of file module_functions.c.

References CategoryGetComponent(), ComponentGetId(), ComponentGetType(), GetCategory(), HasQuantityByID(), and id.

Referenced by computennz().

{
  categoryobject catg; componentobject cmpt;
  AnalysisDataType t; int id; PetscErrorCode ierr;
  PetscFunctionBegin;
  ierr = GetCategory(cat,&catg,f); CHKERRQ(ierr);
  if (!*f) PetscFunctionReturn(0);
  ierr = CategoryGetComponent(catg,cmp,&cmpt,f); CHKERRQ(ierr);
  if (!*f) PetscFunctionReturn(0);
  ierr = ComponentGetId(cmpt,&id); CHKERRQ(ierr);
  ierr = ComponentGetType(cmpt,&t); CHKERRQ(ierr);
  ierr = HasQuantityByID(prob,id,t,f); CHKERRQ(ierr);
  PetscFunctionReturn(0);
}

Here is the call graph for this function:

PetscErrorCode HasQuantityByID ( AnaModNumericalProblem  prob,
int  id,
AnalysisDataType  type,
PetscBool *  f 
)

Auxiliary routine with lookup by ID, which is much faster than by string indexing.

Definition at line 667 of file module_functions.c.

References ANALYSISDBLARRAY, ANALYSISDOUBLE, ANALYSISINTARRAY, and ANALYSISINTEGER.

Referenced by HasQuantity().

{
  Mat A = (Mat)prob; PetscReal rv,*rsv; int iv,*isv;
  PetscErrorCode ierr;
  PetscFunctionBegin;
  switch (type) {
  case ANALYSISINTEGER :
    ierr = PetscObjectComposedDataGetInt
      ((PetscObject)A,id,iv,*f); CHKERRQ(ierr);
    break;
  case ANALYSISDOUBLE :
    ierr = PetscObjectComposedDataGetReal
      ((PetscObject)A,id,rv,*f); CHKERRQ(ierr);
    break;
  case ANALYSISINTARRAY :
    ierr = PetscObjectComposedDataGetIntstar
      ((PetscObject)A,id,isv,*f); CHKERRQ(ierr);
    break;
  case ANALYSISDBLARRAY :
    ierr = PetscObjectComposedDataGetRealstar
      ((PetscObject)A,id,rsv,*f); CHKERRQ(ierr);
    break;
  default : SETERRQ1(MPI_COMM_WORLD,1,"Unknown data type %d",type);
  }
  PetscFunctionReturn(0);
}
PetscErrorCode QuantityAsString ( AnalysisItem q,
AnalysisDataType  t,
char **  s 
)

Generate a character string for a given quantity.

Definition at line 731 of file module_functions.c.

References ANALYSISDBLARRAY, ANALYSISDOUBLE, ANALYSISINTARRAY, ANALYSISINTEGER, ANALYSISSTRING, AnalysisItem::c, AnalysisItem::i, AnalysisItem::ii, AnalysisItem::len, AnalysisItem::r, and AnalysisItem::rr.

Referenced by ComputeOrRetrieveQuantity(), and ReportAnamodContent().

{
  PetscErrorCode ierr; size_t l;

  PetscFunctionBegin;
  switch (t) {
  case ANALYSISINTEGER : 
    ierr = PetscMalloc(12*sizeof(char),s); CHKERRQ(ierr);
    ierr = PetscMemzero((void*)*s,12*sizeof(char)); CHKERRQ(ierr);
    sprintf((char*)*s,"%d",q->i);
    break;
  case ANALYSISDOUBLE : 
    ierr = PetscMalloc(22*sizeof(char),s); CHKERRQ(ierr);
    ierr = PetscMemzero((void*)*s,22*sizeof(char)); CHKERRQ(ierr);
    sprintf((char*)*s,"%e",q->r);
    break;
  case ANALYSISSTRING :
    ierr = PetscMalloc((strlen(q->c)+1)*sizeof(char),s); CHKERRQ(ierr);
    ierr = PetscMemzero((void*)*s,(strlen(q->c)+1)*sizeof(char)); CHKERRQ(ierr);
    sprintf((char*)*s,"%s",q->c);
    break;
  case ANALYSISINTARRAY :
    {
      int i,n,*iar;
      iar = q->ii;
      n = q->len;
      ierr = PetscMalloc((10*n+1)*sizeof(char),s); CHKERRQ(ierr);
      ierr = PetscMemzero((void*)*s,(10*n+1)*sizeof(char)); CHKERRQ(ierr);
      for (i=0; i<=n; i++) {
        ierr = PetscStrlen(*s,&l); CHKERRQ(ierr);
        sprintf((char*)*s+l,"%d,",iar[i]);
      }
    }
    break;
  case ANALYSISDBLARRAY :
    {
      int i,n; PetscReal *rar; 
      rar = q->rr;
      n = q->len;
      ierr = PetscMalloc((15*n+1)*sizeof(char),s); CHKERRQ(ierr);
      ierr = PetscMemzero((void*)*s,(15*n+1)*sizeof(char)); CHKERRQ(ierr);
      for (i=0; i<=n; i++) {
        ierr = PetscStrlen(*s,&l); CHKERRQ(ierr);
        sprintf((char*)*s+l,"%e,",rar[i]);
      }
    }
    break;
  default : SETERRQ1(MPI_COMM_WORLD,1,"Cannot string quantity type %d",t);
  }
  PetscFunctionReturn(0);
}
PetscErrorCode RegisterModule ( const char *  cat,
const char *  cmp,
AnalysisDataType  type,
PetscErrorCode(*)(AnaModNumericalProblem, AnalysisItem *, int *, PetscBool *)  f 
)

Register a new computational module

This adds a computational routine (the f argument) into the modules database under the given category (cat) and module (cmp) label. If the category does not exist yet, it is created.

The available types are defined in anamodtypes.h

If the routine is NULL, only the category and component are created.

Routine prototype:

  • problem (input)
  • item (output)
  • array length (output)
  • success (output)

See also HasComputeModule(), ComputeQuantity().

Definition at line 382 of file module_functions.c.

References AnaModIsInitialized, CategoryComponentSetModule(), and id.

Referenced by RegisterICMKModules(), RegisterIprsModules(), RegisterJPLModules(), RegisterLapackModules(), RegisterNormalityModules(), RegisterSimpleModules(), RegisterSpectrumModules(), RegisterStatsModules(), RegisterStructureModules(), and RegisterVarianceModules().

{
  int id; PetscErrorCode ierr;
  PetscFunctionBegin;

  if (!AnaModIsInitialized)
      SETERRQ(MPI_COMM_WORLD,1,"AnaMod not initialized: insert call to AnaModInitialize()\n");
  /*
   * Check for illegal names
   */
  if (strchr(cat,':'))   SETERRQ(MPI_COMM_WORLD,1,"Illegal colon in category name");
  if (strchr(cmp,':'))   SETERRQ(MPI_COMM_WORLD,1,"Illegal colon in component name");

#if defined(ANAMODDEBUG)
  printf("Defining module <%s:%s>\n",cat,cmp);
#endif
  ierr = PetscObjectComposedDataRegister(&id); CHKERRQ(ierr);
  ierr = CategoryComponentSetModule(cat,cmp,type,id,f); CHKERRQ(ierr);

  PetscFunctionReturn(0);
}

Here is the call graph for this function:

PetscErrorCode RetrieveQuantity ( AnaModNumericalProblem  prob,
const char *  cat,
const char *  cmp,
AnalysisItem res,
int *  rreslen,
PetscBool *  success 
)

Retrieve an attached quantity. Note that this does not report the length of arrays; you have to know under which name this is stored.

Definition at line 577 of file module_functions.c.

References ComputeOrRetrieveQuantity(), and MODE_RETRIEVE.

{
  PetscErrorCode ierr;
  PetscFunctionBegin;
  ierr = ComputeOrRetrieveQuantity
    (prob,cat,cmp,res,rreslen,success,MODE_RETRIEVE); CHKERRQ(ierr);
  PetscFunctionReturn(0);
}

Here is the call graph for this function:

PetscErrorCode RetrieveQuantityByID ( AnaModNumericalProblem  prob,
int  id,
AnalysisDataType  type,
AnalysisItem result,
PetscBool *  f 
)

See also HasQuantityByID()

Definition at line 698 of file module_functions.c.

References ANALYSISDBLARRAY, ANALYSISDOUBLE, ANALYSISINTARRAY, ANALYSISINTEGER, AnalysisItem::i, AnalysisItem::ii, AnalysisItem::r, and AnalysisItem::rr.

{
  Mat A = (Mat)prob; PetscErrorCode ierr;
  PetscFunctionBegin;

  switch (type) {
  case ANALYSISINTEGER :
    ierr = PetscObjectComposedDataGetInt
      ((PetscObject)A,id,result->i,*f); CHKERRQ(ierr);
    break;
  case ANALYSISDOUBLE :
    ierr = PetscObjectComposedDataGetReal
      ((PetscObject)A,id,result->r,*f); CHKERRQ(ierr);
    break;
  case ANALYSISINTARRAY :
    ierr = PetscObjectComposedDataGetIntstar
      ((PetscObject)A,id,result->ii,*f); CHKERRQ(ierr);
    break;
  case ANALYSISDBLARRAY :
    ierr = PetscObjectComposedDataGetRealstar
      ((PetscObject)A,id,result->rr,*f); CHKERRQ(ierr);
    break;
  default : SETERRQ1(MPI_COMM_WORLD,1,"Unknown data type %d",type);
  }
  PetscFunctionReturn(0);
}

Variable Documentation

int AnaModIsInitialized = 0 [static]
struct { ... } anamodtypenames[5] [static]

Definition at line 279 of file module_functions.c.

int id

Definition at line 274 of file module_functions.c.

Referenced by AvgDiagDist(), AvgNnzpRow(), BlockSize(), ColourOffsets(), Colours(), ColourSizes(), ColVariability(), Commutator(), ComponentSetModule(), compute_dd(), compute_dummy_rows(), compute_eigenvalues(), compute_ellipse_from_Ritz_values(), compute_icm_splits(), compute_nnz_structure(), compute_posdiag(), compute_singularvalues(), compute_tracea2(), ComputeDiagonal(), computennz(), computetrace(), ComputeVariability(), Departure(), DepartureLee95(), DepartureLee96L(), DepartureLee96U(), DepartureRuhe75(), DiagDefinite(), DiagonalAverage(), DiagonalDominance(), DiagonalSign(), DiagonalVariance(), DiagZeroStart(), DummyRows(), DummyRowsKind(), eigenvaluecomp(), HasQuantity(), JonesPlassmannColouring(), Kappa(), LBandWidth(), Lee95bounds(), Lee96bounds(), LeftSkyline(), LoBand(), MatCommutatorNormF(), MatSymmPartNormInf(), MaxEVbyImIm(), MaxEVbyImRe(), MaxEVbyMagIm(), MaxEVbyMagRe(), MaxEVbyRealIm(), MaxEVbyRealRe(), MaxNNonZerosPerRow(), MinEVbyMagIm(), MinEVbyMagRe(), MinNNonZerosPerRow(), NColours(), NDiags(), NDummyRows(), NNonZeros(), Nnz(), NnzDia(), NnzLow(), NnzUp(), norm1(), normF(), normInf(), NRitzValues(), nRows(), NSplits(), NUnstruct(), PosFraction(), RBandWidth(), RegisterModule(), regularblocks(), RelSymm(), RightSkyline(), RitzValuesC(), RitzValuesR(), RowVariability(), SigmaDiagDist(), SigmaMax(), SigmaMin(), SpectrumAX(), SpectrumAY(), SpectrumCX(), SpectrumCY(), Splits(), Symmetry(), SymmetryANorm(), SymmetryFANorm(), SymmetryFSNorm(), SymmetrySNorm(), Trace(), TraceA2(), TraceAbs(), UpBand(), and Version().

const char * mysqlname

Definition at line 274 of file module_functions.c.

Referenced by AnaModGetTypeMySQLName().

const char* name

Definition at line 274 of file module_functions.c.

Referenced by AddToFeatureSet(), CategoryEnableByName(), and GetCategoryIndex().

int nAnaModTypeNames [static]

Definition at line 275 of file module_functions.c.

Referenced by AnaModGetTypeMySQLName(), AnaModGetTypeName(), and AnaModInitialize().

int ncategories = 0