int add_petsc_object() { _F_ #ifdef WITH_PETSC int ierr; PetscTruth petsc_initialized, petsc_finalized; ierr = PetscFinalized(&petsc_finalized); CHKERRQ(ierr); if (petsc_finalized == PETSC_TRUE) error("PETSc cannot be used once it has been finalized. You must restart the application."); ierr = PetscInitialized(&petsc_initialized); CHKERRQ(ierr); if (petsc_initialized != PETSC_TRUE) { bool have_args = CommandLineArgs::check(); if (have_args) ierr = PetscInitialize(&CommandLineArgs::get_argc(), &CommandLineArgs::get_argv(), PETSC_NULL, PETSC_NULL); else #ifdef WITH_MPI CommandLineArgs::missing_error(); #else ierr = PetscInitializeNoArguments(); #endif CHKERRQ(ierr); } num_petsc_objects++; #endif return 0; }
RigidKinematicsSolver::~RigidKinematicsSolver() { PetscErrorCode ierr; PetscBool finalized; PetscFunctionBeginUser; ierr = PetscFinalized(&finalized); CHKERRV(ierr); if (finalized) return; ierr = destroy(); CHKERRV(ierr); } // ~RigidKinematicsSolver
// Destructor. ProbeBase::~ProbeBase() { PetscErrorCode ierr; PetscBool finalized; PetscFunctionBeginUser; ierr = PetscFinalized(&finalized); CHKERRV(ierr); if (finalized) return; ierr = destroy(); CHKERRV(ierr); } // ProbeBase::~ProbeBase
SingleBodyBase::~SingleBodyBase() { PetscErrorCode ierr; PetscBool finalized; PetscFunctionBeginUser; ierr = PetscFinalized(&finalized); CHKERRV(ierr); if (finalized) return; ierr = DMDestroy(&da); CHKERRV(ierr); comm = MPI_COMM_NULL; } // ~SingleBodyBase
// Destructor. SolutionBase::~SolutionBase() { PetscErrorCode ierr; PetscBool finalized; PetscFunctionBeginUser; ierr = PetscFinalized(&finalized); CHKERRV(ierr); if (finalized) return; ierr = VecDestroy(&UGlobal); CHKERRV(ierr); ierr = VecDestroy(&pGlobal); CHKERRV(ierr); comm = MPI_COMM_NULL; } // ~SolutionBase
int remove_petsc_object() { PetscTruth petsc_initialized, petsc_finalized; int ierr = PetscFinalized(&petsc_finalized); CHKERRQ(ierr); ierr = PetscInitialized(&petsc_initialized); CHKERRQ(ierr); if (petsc_finalized == PETSC_TRUE || petsc_initialized == PETSC_FALSE) // This should never happen here. return -1; if (--num_petsc_objects == 0) { int ierr = PetscFinalize(); CHKERRQ(ierr); this->info("PETSc finalized. No more PETSc usage allowed until application restart."); } }
int add_petsc_object() { int ierr; PetscTruth petsc_initialized, petsc_finalized; ierr = PetscFinalized(&petsc_finalized); CHKERRQ(ierr); if (petsc_finalized == PETSC_TRUE) throw Hermes::Exceptions::Exception("PETSc cannot be used once it has been finalized. You must restart the application."); ierr = PetscInitialized(&petsc_initialized); CHKERRQ(ierr); if (petsc_initialized != PETSC_TRUE) { ierr = PetscInitializeNoArguments(); CHKERRQ(ierr); } num_petsc_objects++; }