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