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"
43#if (Pism_USE_YAC == 1)
45static bool s_pism_yac_initialized =
false;
47static void pism_yac_error_handler(MPI_Comm ,
const char *msg,
const char *source,
58 MPI_Initialized(&flag);
61 MPI_Init(&argc, &argv);
68 PetscBool petsc_initialized = PETSC_FALSE;
70 PetscErrorCode ierr = PetscInitialized(&petsc_initialized);
75#if (Pism_USE_YAC == 1)
79 if (yaxt_initialized != 1) {
85 if (not s_pism_yac_initialized) {
87 const char *start_datetime =
"1850-01-01T00:00:00";
88 const char *end_datetime =
"1850-12-31T00:00:00";
92 yac_set_abort_handler((yac_abort_func)pism_yac_error_handler);
94 yac_cdef_calendar(YAC_YEAR_OF_365_DAYS);
95 yac_cdef_datetime(start_datetime, end_datetime);
97 yac_cdef_comp(
"pism", &yac_comp_id);
101 if (petsc_initialized == PETSC_FALSE) {
102 yac_cget_comp_comm(yac_comp_id, &PETSC_COMM_WORLD);
105 s_pism_yac_initialized =
true;
111 if (petsc_initialized == PETSC_FALSE) {
112 PetscErrorCode ierr = PetscInitialize(&argc, &argv, NULL,
help);
116 printf(
"PETSc initialization failed. Aborting...\n");
117 MPI_Abort(MPI_COMM_WORLD, -1);
127 std::vector<char *> argv = {
nullptr };
132 int argc = (
int) args.size();
133 std::vector<const char*> argv(argc + 1);
135 for (
int i = 0; i < argc; ++i) {
136 argv[i] = args[i].c_str();
138 argv[argc] =
nullptr;
141 PetscOptionsInsertArgs(NULL, argc,
const_cast<char**
>(argv.data()));
149 PetscBool petsc_initialized = PETSC_FALSE;
150 PetscErrorCode ierr = PetscInitialized(&petsc_initialized);
151 CHKERRCONTINUE(ierr);
155 ierr = PetscFinalize();
156 CHKERRCONTINUE(ierr);
160#if (Pism_USE_YAC == 1)
162 if (s_pism_yac_initialized) {
170 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)
static bool s_pism_finalize_petsc
true if PISM should finalize PETSc, false otherwise
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)