23#include "pism/util/pism_initialization.hh"
25#include "pism/util/error_handling.hh"
27#if (Pism_USE_YAC == 1)
28#include "pism/util/yaxt_wrapper.h"
40#if (Pism_USE_YAC == 1)
42static bool s_pism_yac_initialized =
false;
44static void pism_yac_error_handler(MPI_Comm ,
const char *msg,
const char *source,
55 MPI_Initialized(&flag);
58 MPI_Init(&argc, &argv);
65#if (Pism_USE_YAC == 1)
69 if (yaxt_initialized != 1) {
75 if (not s_pism_yac_initialized) {
77 const char *start_datetime =
"1850-01-01T00:00:00";
78 const char *end_datetime =
"1850-12-31T00:00:00";
82 yac_set_abort_handler((yac_abort_func)pism_yac_error_handler);
84 yac_cdef_calendar(YAC_YEAR_OF_365_DAYS);
85 yac_cdef_datetime(start_datetime, end_datetime);
87 yac_cdef_comp(
"pism", &yac_comp_id);
88 yac_cget_comp_comm(yac_comp_id, &PETSC_COMM_WORLD);
90 s_pism_yac_initialized =
true;
96 PetscBool initialized = PETSC_FALSE;
97 PetscErrorCode ierr = PetscInitialized(&initialized);
100 if (initialized == PETSC_FALSE) {
101 ierr = PetscInitialize(&argc, &argv, NULL,
help);
105 printf(
"PETSc initialization failed. Aborting...\n");
106 MPI_Abort(MPI_COMM_WORLD, -1);
113 std::vector<char *> argv = {
nullptr };
118 int argc = (
int) args.size();
119 std::vector<const char*> argv(argc + 1);
121 for (
int i = 0; i < argc; ++i) {
122 argv[i] = args[i].c_str();
124 argv[argc] =
nullptr;
127 PetscOptionsInsertArgs(NULL, argc,
const_cast<char**
>(argv.data()));
135 PetscBool petsc_initialized = PETSC_FALSE;
136 PetscErrorCode ierr = PetscInitialized(&petsc_initialized);
137 CHKERRCONTINUE(ierr);
139 if (petsc_initialized == PETSC_TRUE) {
141 ierr = PetscFinalize();
142 CHKERRCONTINUE(ierr);
146#if (Pism_USE_YAC == 1)
148 if (s_pism_yac_initialized) {
156 if (yaxt_initialized == 1 and yaxt_finalized != 1) {
static RuntimeError formatted(const ErrorLocation &location, const char format[],...) __attribute__((format(printf
build a RuntimeError with a formatted message
#define PISM_CHK(errcode, name)
void initialize(int argc, char **argv, const char *help)
void initialize_options(const std::vector< std::string > &args)
std::string printf(const char *format,...)
static bool s_pism_finalize_mpi
true if PISM should finalize MPI, false otherwise
void pism_yaxt_initialize(MPI_Comm default_comm)
int pism_yaxt_initialized(void)
int pism_yaxt_finalized(void)
void pism_yaxt_finalize(void)