Actual source code: test.c

  1: #ifdef PETSC_RCS_HEADER
  2: static char vcid[] = "$Id: test.c,v 1.2 2000/01/10 03:54:22 knepley Exp $";
  3: #endif

 5:  #include src/mesh/impls/triangular/triimpl.h

  7: EXTERN_C_BEGIN
  8: /*
  9:     MeshOrdering_Triangular_2D_Test - Test ordering for the nodes of a given mesh.
 10: */
 11: int MeshOrdering_Triangular_2D_Test(Mesh mesh, MatOrderingType type, AO *ordering)
 12: {
 13:   int        numNodes = mesh->numNodes;
 14:   int       *AppOrdering;   /* The initial ordering (0, 1, ...) */
 15:   int       *PetscOrdering; /* The RCM ordering */
 16:   char       typeName[256];
 17:   int        i;
 18:   PetscTruth opt, isidentity, isreverse, isflip;
 19:   int        ierr;

 21:   PetscMalloc(numNodes * sizeof(int), &AppOrdering);
 22:   PetscMalloc(numNodes * sizeof(int), &PetscOrdering);

 24:   PetscStrcpy(typeName, "identity");
 25:   PetscOptionsGetString(mesh->prefix, "-mesh_ordering_subtype", typeName, 256, &opt);
 26:   PetscStrcasecmp(typeName, "identity", &isidentity);
 27:   PetscStrcasecmp(typeName, "reverse",  &isreverse);
 28:   PetscStrcasecmp(typeName, "flip",     &isflip);
 29:   if (isidentity == PETSC_TRUE) {
 30:     for(i = 0; i < numNodes; i++) {
 31:       AppOrdering[i]   = i;
 32:       PetscOrdering[i] = i;
 33:     }
 34:   } else if (isreverse == PETSC_TRUE) {
 35:     for(i = 0; i < numNodes; i++) {
 36:       AppOrdering[i]   = i;
 37:       PetscOrdering[i] = numNodes-(i+1);
 38:     }
 39:   } else if (isflip == PETSC_TRUE) {
 40:     for(i = 0; i < numNodes; i++) {
 41:       AppOrdering[i]   = i;
 42:       PetscOrdering[i] = i;
 43:     }
 44:     PetscOrdering[0]   = 1;
 45:     PetscOrdering[1]   = 0;
 46:   } else {
 47:     SETERRQ1(PETSC_ERR_ARG_WRONG, "Invalid ordering subtype: %s", typeName);
 48:   }
 49:   /* Create the ordering object */
 50:   AOCreateBasic(mesh->comm, numNodes, AppOrdering, PetscOrdering, ordering);

 52:   PetscFree(AppOrdering);
 53:   PetscFree(PetscOrdering);
 54:   return(0);
 55: }
 56: EXTERN_C_END