Actual source code: ex95.c
1: #include "petscsystypes.h"
2: static char help[] = "Test PetscViewer_ExodusII\n\n";
4: #include <petsc.h>
5: #include <exodusII.h>
7: int main(int argc, char **argv)
8: {
9: DM dm, pdm;
10: PetscInt ovlp = 0;
11: char ifilename[PETSC_MAX_PATH_LEN], ofilename[PETSC_MAX_PATH_LEN];
12: PetscExodusIIInt numZVars, numNVars;
13: PetscExodusIIInt nNodalVar = 4;
14: PetscExodusIIInt nZonalVar = 3;
15: PetscInt order = 1;
16: PetscViewer viewer;
17: PetscExodusIIInt index = -1;
18: const char *nodalVarName[4] = {"U_x", "U_y", "Alpha", "Beta"};
19: const char *zonalVarName[3] = {"Sigma_11", "Sigma_12", "Sigma_22"};
20: const char *testNames[3] = {"U", "Sigma", "Gamma"};
21: const char *varName = NULL;
23: PetscFunctionBeginUser;
24: PetscCall(PetscInitialize(&argc, &argv, NULL, help));
25: PetscOptionsBegin(PETSC_COMM_WORLD, NULL, "PetscViewer_ExodusII test", "ex95");
26: PetscCall(PetscOptionsString("-i", "Filename to read", "ex95", ifilename, ifilename, sizeof(ifilename), NULL));
27: PetscCall(PetscOptionsString("-o", "Filename to write", "ex95", ofilename, ofilename, sizeof(ofilename), NULL));
28: PetscOptionsEnd();
30: #ifdef PETSC_USE_DEBUG
31: PetscCallExternal(ex_opts, EX_VERBOSE + EX_DEBUG);
32: #endif
34: PetscCall(DMPlexCreateFromFile(PETSC_COMM_WORLD, ifilename, NULL, PETSC_TRUE, &dm));
35: PetscCall(DMPlexDistributeSetDefault(dm, PETSC_FALSE));
36: PetscCall(DMSetFromOptions(dm));
37: PetscCall(PetscObjectSetName((PetscObject)dm, "ex95"));
38: PetscCall(DMViewFromOptions(dm, NULL, "-dm_view"));
40: PetscCall(PetscViewerExodusIIOpen(PETSC_COMM_WORLD, ofilename, FILE_MODE_WRITE, &viewer));
42: /* Save the geometry to the file, erasing all previous content */
43: PetscCall(PetscViewerExodusIISetOrder(viewer, order));
44: PetscCall(DMView(dm, viewer));
45: PetscCall(PetscViewerView(viewer, PETSC_VIEWER_STDOUT_WORLD));
46: PetscCall(PetscViewerFlush(viewer));
48: PetscCall(DMPlexDistribute(dm, ovlp, NULL, &pdm));
49: if (!pdm) pdm = dm;
51: /* Testing Variable Number*/
52: PetscCall(PetscViewerExodusIISetZonalVariable(viewer, nZonalVar));
53: nZonalVar = -1;
54: PetscCall(PetscViewerExodusIIGetZonalVariable(viewer, &nZonalVar));
55: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Number of zonal variables: %d\n", nZonalVar));
57: PetscCall(PetscViewerExodusIISetNodalVariable(viewer, nNodalVar));
58: nNodalVar = -1;
59: PetscCall(PetscViewerExodusIIGetNodalVariable(viewer, &nNodalVar));
60: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Number of nodal variables: %d\n", nNodalVar));
61: PetscCall(PetscViewerView(viewer, PETSC_VIEWER_STDOUT_WORLD));
63: /*
64: Test of PetscViewerExodusIISet[Nodal/Zonal]VariableName
65: */
66: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Testing PetscViewerExodusIISet[Nodal/Zonal]VariableName\n"));
67: for (PetscExodusIIInt i = 0; i < nNodalVar; i++) { PetscCall(PetscViewerExodusIISetNodalVariableName(viewer, i, nodalVarName[i])); }
68: for (PetscExodusIIInt i = 0; i < nZonalVar; i++) { PetscCall(PetscViewerExodusIISetZonalVariableName(viewer, i, zonalVarName[i])); }
69: PetscCall(PetscViewerView(viewer, PETSC_VIEWER_STDOUT_WORLD));
70: PetscCall(PetscViewerDestroy(&viewer));
72: /*
73: Test of PetscViewerExodusIIGet[Nodal/Zonal]VariableName
74: */
75: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "\n\nReopenning the output file in Read-only mode\n"));
76: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Testing PetscViewerExodusIIGet[Nodal/Zonal]VariableName\n"));
77: PetscCall(PetscViewerExodusIIOpen(PETSC_COMM_WORLD, ofilename, FILE_MODE_APPEND, &viewer));
78: PetscCall(PetscViewerExodusIISetOrder(viewer, order));
79: PetscCall(PetscViewerExodusIIGetZonalVariable(viewer, &numZVars));
80: PetscCall(PetscViewerExodusIIGetNodalVariable(viewer, &numNVars));
82: for (PetscExodusIIInt i = 0; i < numNVars; i++) {
83: PetscCall(PetscViewerExodusIIGetNodalVariableName(viewer, i, &varName));
84: PetscCall(PetscViewerExodusIIGetNodalVariableIndex(viewer, varName, &index));
85: PetscCall(PetscPrintf(PETSC_COMM_WORLD, " Nodal variable %d: %s, index in file %d\n", i, varName, index));
86: }
87: for (PetscExodusIIInt i = 0; i < 3; i++) {
88: PetscCall(PetscViewerExodusIIGetNodalVariableIndex(viewer, testNames[i], &index));
89: PetscCall(PetscPrintf(PETSC_COMM_WORLD, " Nodal variable %d: %s, index in file %d\n", i, testNames[i], index));
90: }
91: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "\n"));
93: for (PetscExodusIIInt i = 0; i < numZVars; i++) {
94: PetscCall(PetscViewerExodusIIGetZonalVariableName(viewer, i, &varName));
95: PetscCall(PetscViewerExodusIIGetZonalVariableIndex(viewer, varName, &index));
96: PetscCall(PetscPrintf(PETSC_COMM_WORLD, " Zonal variable %d: %s, index in file %d\n", i, varName, index));
97: }
98: for (PetscExodusIIInt i = 0; i < 3; i++) {
99: PetscCall(PetscViewerExodusIIGetZonalVariableIndex(viewer, testNames[i], &index));
100: PetscCall(PetscPrintf(PETSC_COMM_WORLD, " Zonal variable %d: %s, index in file %d\n", i, testNames[i], index));
101: }
103: PetscCall(PetscViewerDestroy(&viewer));
104: PetscCall(DMDestroy(&dm));
105: PetscCall(PetscFinalize());
106: return 0;
107: }
109: /*TEST
111: build:
112: requires: exodusii pnetcdf !complex
113: test:
114: suffix: 0
115: nsize: 1
116: args: -i ${wPETSC_DIR}/share/petsc/datafiles/meshes/FourSquareT-large.exo -o FourSquareT-large_out.exo
118: TEST*/