1*5037d55dSJames Wright // Copyright (c) 2017-2024, Lawrence Livermore National Security, LLC and other CEED contributors. 2*5037d55dSJames Wright // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 3*5037d55dSJames Wright // 4*5037d55dSJames Wright // SPDX-License-Identifier: BSD-2-Clause 5*5037d55dSJames Wright // 6*5037d55dSJames Wright // This file is part of CEED: http://github.com/ceed 7*5037d55dSJames Wright #pragma once 8*5037d55dSJames Wright 9*5037d55dSJames Wright #include <petscsys.h> 10*5037d55dSJames Wright 11*5037d55dSJames Wright #if defined(__clang_analyzer__) 12*5037d55dSJames Wright #define PETSC_CEED_EXTERN extern 13*5037d55dSJames Wright #elif defined(__cplusplus) 14*5037d55dSJames Wright #define PETSC_CEED_EXTERN extern "C" 15*5037d55dSJames Wright #else 16*5037d55dSJames Wright #define PETSC_CEED_EXTERN extern 17*5037d55dSJames Wright #endif 18*5037d55dSJames Wright 19*5037d55dSJames Wright #if defined(__clang_analyzer__) 20*5037d55dSJames Wright #define PETSC_CEED_INTERN 21*5037d55dSJames Wright #else 22*5037d55dSJames Wright #define PETSC_CEED_INTERN PETSC_CEED_EXTERN __attribute__((visibility("hidden"))) 23*5037d55dSJames Wright #endif 24*5037d55dSJames Wright 25*5037d55dSJames Wright /** 26*5037d55dSJames Wright @brief Calls a libCEED function and then checks the resulting error code. 27*5037d55dSJames Wright If the error code is non-zero, then a PETSc error is set with the libCEED error message. 28*5037d55dSJames Wright **/ 29*5037d55dSJames Wright /// @ingroup RatelInternal 30*5037d55dSJames Wright #ifndef PetscCallCeed 31*5037d55dSJames Wright #define PetscCallCeed(ceed_, ...) \ 32*5037d55dSJames Wright do { \ 33*5037d55dSJames Wright int ierr_q_; \ 34*5037d55dSJames Wright PetscStackUpdateLine; \ 35*5037d55dSJames Wright ierr_q_ = __VA_ARGS__; \ 36*5037d55dSJames Wright if (PetscUnlikely(ierr_q_ != CEED_ERROR_SUCCESS)) { \ 37*5037d55dSJames Wright const char *error_message; \ 38*5037d55dSJames Wright CeedGetErrorMessage(ceed_, &error_message); \ 39*5037d55dSJames Wright SETERRQ(PETSC_COMM_SELF, PETSC_ERR_LIB, "%s", error_message); \ 40*5037d55dSJames Wright } \ 41*5037d55dSJames Wright } while (0) 42*5037d55dSJames Wright #endif 43