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: #undef __FUNCT__
13: int MeshOrdering_Triangular_2D_Test(Mesh mesh, MatOrderingType type, AO *ordering)
14: {
15: int numNodes = mesh->numNodes;
16: int *AppOrdering; /* The initial ordering (0, 1, ...) */
17: int *PetscOrdering; /* The RCM ordering */
18: char typeName[256];
19: int i;
20: PetscTruth opt, isidentity, isreverse, isflip;
21: int ierr;
23: PetscMalloc(numNodes * sizeof(int), &AppOrdering);
24: PetscMalloc(numNodes * sizeof(int), &PetscOrdering);
26: PetscStrcpy(typeName, "identity");
27: PetscOptionsGetString(mesh->prefix, "-mesh_ordering_subtype", typeName, 256, &opt);
28: PetscStrcasecmp(typeName, "identity", &isidentity);
29: PetscStrcasecmp(typeName, "reverse", &isreverse);
30: PetscStrcasecmp(typeName, "flip", &isflip);
31: if (isidentity == PETSC_TRUE) {
32: for(i = 0; i < numNodes; i++) {
33: AppOrdering[i] = i;
34: PetscOrdering[i] = i;
35: }
36: } else if (isreverse == PETSC_TRUE) {
37: for(i = 0; i < numNodes; i++) {
38: AppOrdering[i] = i;
39: PetscOrdering[i] = numNodes-(i+1);
40: }
41: } else if (isflip == PETSC_TRUE) {
42: for(i = 0; i < numNodes; i++) {
43: AppOrdering[i] = i;
44: PetscOrdering[i] = i;
45: }
46: PetscOrdering[0] = 1;
47: PetscOrdering[1] = 0;
48: } else {
49: SETERRQ1(PETSC_ERR_ARG_WRONG, "Invalid ordering subtype: %s", typeName);
50: }
51: /* Create the ordering object */
52: AOCreateBasic(mesh->comm, numNodes, AppOrdering, PetscOrdering, ordering);
54: PetscFree(AppOrdering);
55: PetscFree(PetscOrdering);
56: return(0);
57: }
58: EXTERN_C_END