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