1c4762a1bSJed Brown static char help[] = "Tests repeated PetscInitialize/PetscFinalize calls.\n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petscsys.h> 4c4762a1bSJed Brown 5d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv) 6d71ae5a4SJacob Faibussowitsch { 7c4762a1bSJed Brown int i, imax; 8540e20f2SPierre Jolivet #if defined(PETSC_HAVE_ELEMENTAL) 9540e20f2SPierre Jolivet PetscBool initialized; 10540e20f2SPierre Jolivet #endif 11c4762a1bSJed Brown 12c4762a1bSJed Brown #if defined(PETSC_HAVE_MPIUNI) 13c4762a1bSJed Brown imax = 32; 14c4762a1bSJed Brown #else 15c4762a1bSJed Brown imax = 1024; 16c4762a1bSJed Brown #endif 17c4762a1bSJed Brown 189566063dSJacob Faibussowitsch PetscCallMPI(MPI_Init(&argc, &argv)); 19540e20f2SPierre Jolivet #if defined(PETSC_HAVE_ELEMENTAL) 209566063dSJacob Faibussowitsch PetscCall(PetscElementalInitializePackage()); 219566063dSJacob Faibussowitsch PetscCall(PetscElementalInitialized(&initialized)); 22180dcd96SBarry Smith PetscCheck(initialized, MPI_COMM_WORLD, PETSC_ERR_PLIB, "Error in Elemental package processing"); 23540e20f2SPierre Jolivet #endif 24c4762a1bSJed Brown for (i = 0; i < imax; ++i) { 25327415f7SBarry Smith PetscFunctionBeginUser; 26c8025a54SPierre Jolivet PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 279566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 28540e20f2SPierre Jolivet #if defined(PETSC_HAVE_ELEMENTAL) 29180dcd96SBarry Smith // if Elemental is initialized outside of PETSc it should remain initialized 309566063dSJacob Faibussowitsch PetscCall(PetscElementalInitialized(&initialized)); 31180dcd96SBarry Smith PetscCheck(initialized, MPI_COMM_WORLD, PETSC_ERR_PLIB, "Error in Elemental package processing"); 32540e20f2SPierre Jolivet #endif 33c4762a1bSJed Brown } 34540e20f2SPierre Jolivet #if defined(PETSC_HAVE_ELEMENTAL) 359566063dSJacob Faibussowitsch PetscCall(PetscElementalFinalizePackage()); 369566063dSJacob Faibussowitsch PetscCall(PetscElementalInitialized(&initialized)); 37180dcd96SBarry Smith PetscCheck(!initialized, MPI_COMM_WORLD, PETSC_ERR_PLIB, "Error in Elemental package processing"); 38540e20f2SPierre Jolivet for (i = 0; i < 32; ++i) { /* increasing the upper bound will generate an error in Elemental */ 39327415f7SBarry Smith PetscFunctionBeginUser; 40c8025a54SPierre Jolivet PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 419566063dSJacob Faibussowitsch PetscCall(PetscElementalInitialized(&initialized)); 42180dcd96SBarry Smith PetscCheck(initialized, MPI_COMM_WORLD, PETSC_ERR_PLIB, "Error in Elemental package processing"); 4328b400f6SJacob Faibussowitsch PetscCheck(initialized, PETSC_COMM_WORLD, PETSC_ERR_LIB, "Uninitialized Elemental"); 449566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 459566063dSJacob Faibussowitsch PetscCall(PetscElementalInitialized(&initialized)); 46180dcd96SBarry Smith // if Elemental is initialized inside of PETSc it should be uninitialized in PetscFinalize() 47180dcd96SBarry Smith PetscCheck(!initialized, MPI_COMM_WORLD, PETSC_ERR_PLIB, "Error in Elemental package processing"); 48540e20f2SPierre Jolivet } 49540e20f2SPierre Jolivet #endif 50b122ec5aSJacob Faibussowitsch return MPI_Finalize(); 51c4762a1bSJed Brown } 52c4762a1bSJed Brown 53c4762a1bSJed Brown /*TEST 54c4762a1bSJed Brown 55c4762a1bSJed Brown test: 56b0b1df57SBarry Smith requires: !saws 57*3886731fSPierre Jolivet output_file: output/empty.out 58c4762a1bSJed Brown 59c4762a1bSJed Brown test: 60b0b1df57SBarry Smith requires: !saws 61c4762a1bSJed Brown suffix: 2 62c4762a1bSJed Brown nsize: 2 63*3886731fSPierre Jolivet output_file: output/empty.out 64c4762a1bSJed Brown 65c4762a1bSJed Brown TEST*/ 66