1*9ba83ac0SJeremy L Thompson // Copyright (c) 2017-2026, Lawrence Livermore National Security, LLC and other CEED contributors. 25037d55dSJames Wright // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 35037d55dSJames Wright // 45037d55dSJames Wright // SPDX-License-Identifier: BSD-2-Clause 55037d55dSJames Wright // 65037d55dSJames Wright // This file is part of CEED: http://github.com/ceed 75037d55dSJames Wright #pragma once 85037d55dSJames Wright 95037d55dSJames Wright #include <petscsys.h> 105037d55dSJames Wright 115037d55dSJames Wright #if defined(__clang_analyzer__) 125037d55dSJames Wright #define PETSC_CEED_EXTERN extern 135037d55dSJames Wright #elif defined(__cplusplus) 145037d55dSJames Wright #define PETSC_CEED_EXTERN extern "C" 155037d55dSJames Wright #else 165037d55dSJames Wright #define PETSC_CEED_EXTERN extern 175037d55dSJames Wright #endif 185037d55dSJames Wright 195037d55dSJames Wright #if defined(__clang_analyzer__) 205037d55dSJames Wright #define PETSC_CEED_INTERN 215037d55dSJames Wright #else 225037d55dSJames Wright #define PETSC_CEED_INTERN PETSC_CEED_EXTERN __attribute__((visibility("hidden"))) 235037d55dSJames Wright #endif 245037d55dSJames Wright 255037d55dSJames Wright /** 265037d55dSJames Wright @brief Calls a libCEED function and then checks the resulting error code. 275037d55dSJames Wright If the error code is non-zero, then a PETSc error is set with the libCEED error message. 285037d55dSJames Wright **/ 295037d55dSJames Wright /// @ingroup RatelInternal 305037d55dSJames Wright #ifndef PetscCallCeed 315037d55dSJames Wright #define PetscCallCeed(ceed_, ...) \ 325037d55dSJames Wright do { \ 335037d55dSJames Wright int ierr_q_; \ 345037d55dSJames Wright PetscStackUpdateLine; \ 355037d55dSJames Wright ierr_q_ = __VA_ARGS__; \ 365037d55dSJames Wright if (PetscUnlikely(ierr_q_ != CEED_ERROR_SUCCESS)) { \ 375037d55dSJames Wright const char *error_message; \ 385037d55dSJames Wright CeedGetErrorMessage(ceed_, &error_message); \ 395037d55dSJames Wright SETERRQ(PETSC_COMM_SELF, PETSC_ERR_LIB, "%s", error_message); \ 405037d55dSJames Wright } \ 415037d55dSJames Wright } while (0) 425037d55dSJames Wright #endif 43