Actual source code: ex26.c

  1: static char help[] = "Tests repeated PetscInitialize/PetscFinalize calls.\n\n";

  3: #include <petscsys.h>

  5: int main(int argc, char **argv)
  6: {
  7:   int i, imax;
  8: #if defined(PETSC_HAVE_ELEMENTAL)
  9:   PetscBool initialized;
 10: #endif

 12: #if defined(PETSC_HAVE_MPIUNI)
 13:   imax = 32;
 14: #else
 15:   imax = 1024;
 16: #endif

 18:   PetscCallMPI(MPI_Init(&argc, &argv));
 19: #if defined(PETSC_HAVE_ELEMENTAL)
 20:   PetscCall(PetscElementalInitializePackage());
 21:   PetscCall(PetscElementalInitialized(&initialized));
 22:   PetscCheck(initialized, MPI_COMM_WORLD, PETSC_ERR_PLIB, "Error in Elemental package processing");
 23: #endif
 24:   for (i = 0; i < imax; ++i) {
 25:     PetscFunctionBeginUser;
 26:     PetscCall(PetscInitialize(&argc, &argv, NULL, help));
 27:     PetscCall(PetscFinalize());
 28: #if defined(PETSC_HAVE_ELEMENTAL)
 29:     // if Elemental is initialized outside of PETSc it should remain initialized
 30:     PetscCall(PetscElementalInitialized(&initialized));
 31:     PetscCheck(initialized, MPI_COMM_WORLD, PETSC_ERR_PLIB, "Error in Elemental package processing");
 32: #endif
 33:   }
 34: #if defined(PETSC_HAVE_ELEMENTAL)
 35:   PetscCall(PetscElementalFinalizePackage());
 36:   PetscCall(PetscElementalInitialized(&initialized));
 37:   PetscCheck(!initialized, MPI_COMM_WORLD, PETSC_ERR_PLIB, "Error in Elemental package processing");
 38:   for (i = 0; i < 32; ++i) { /* increasing the upper bound will generate an error in Elemental */
 39:     PetscFunctionBeginUser;
 40:     PetscCall(PetscInitialize(&argc, &argv, NULL, help));
 41:     PetscCall(PetscElementalInitialized(&initialized));
 42:     PetscCheck(initialized, MPI_COMM_WORLD, PETSC_ERR_PLIB, "Error in Elemental package processing");
 43:     PetscCheck(initialized, PETSC_COMM_WORLD, PETSC_ERR_LIB, "Uninitialized Elemental");
 44:     PetscCall(PetscFinalize());
 45:     PetscCall(PetscElementalInitialized(&initialized));
 46:     // if Elemental is initialized inside of PETSc it should be uninitialized in PetscFinalize()
 47:     PetscCheck(!initialized, MPI_COMM_WORLD, PETSC_ERR_PLIB, "Error in Elemental package processing");
 48:   }
 49: #endif
 50:   return MPI_Finalize();
 51: }

 53: /*TEST

 55:    test:
 56:       requires: !saws

 58:    test:
 59:       requires: !saws
 60:       suffix: 2
 61:       nsize: 2
 62:       output_file: output/ex26_1.out

 64: TEST*/