xref: /libCEED/examples/fluids/include/petsc-ceed.h (revision 5037d55df331588b72bed903a854832c66414480)
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