tPetscInitializer.cc - pism - [fork] customized build of PISM, the parallel ice sheet model (tillflux branch)
HTML git clone git://src.adamsgaard.dk/pism
DIR Log
DIR Files
DIR Refs
DIR LICENSE
---
tPetscInitializer.cc (1776B)
---
1 /* Copyright (C) 2014, 2015, 2017 PISM Authors
2 *
3 * This file is part of PISM.
4 *
5 * PISM is free software; you can redistribute it and/or modify it under the
6 * terms of the GNU General Public License as published by the Free Software
7 * Foundation; either version 3 of the License, or (at your option) any later
8 * version.
9 *
10 * PISM is distributed in the hope that it will be useful, but WITHOUT ANY
11 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
13 * details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with PISM; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20 #include "PetscInitializer.hh"
21
22 #include <petscsys.h>
23 #include <mpi.h>
24 #include <cstdio>
25
26 #include "pism/util/error_handling.hh"
27
28 namespace pism {
29 namespace petsc {
30
31 Initializer::Initializer(int argc, char **argv, const char *help) {
32
33 PetscErrorCode ierr = 0;
34 PetscBool initialized = PETSC_FALSE;
35
36 ierr = PetscInitialized(&initialized);
37 PISM_CHK(ierr, "PetscInitialized");
38
39 if (initialized == PETSC_FALSE) {
40 ierr = PetscInitialize(&argc, &argv, NULL, help);
41 PISM_CHK(ierr, "PetscInitialize");
42
43 if (ierr != 0) {
44 printf("PETSc initialization failed. Aborting...\n");
45 MPI_Abort(MPI_COMM_WORLD, -1);
46 }
47 }
48 }
49
50 Initializer::~Initializer() {
51 PetscErrorCode ierr = 0;
52 PetscBool initialized = PETSC_FALSE;
53 ierr = PetscInitialized(&initialized); CHKERRCONTINUE(ierr);
54
55 if (initialized == PETSC_TRUE) {
56 // there is nothing we can do if this fails
57 ierr = PetscFinalize(); CHKERRCONTINUE(ierr);
58 }
59 }
60
61 } // end of namespace petsc
62 } // end of namespace pism