Attention une mise à jour du service Gitlab va être effectuée le mardi 30 novembre entre 17h30 et 18h00. Cette mise à jour va générer une interruption du service dont nous ne maîtrisons pas complètement la durée mais qui ne devrait pas excéder quelques minutes. Cette mise à jour intermédiaire en version 14.0.12 nous permettra de rapidement pouvoir mettre à votre disposition une version plus récente.

SnesMacro.hpp 1.44 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
//! \file
//
//
//  SnesMacro.hpp
//  MoReFEM
//
//  Created by sebastien on 05/09/2018.
//Copyright © 2018 Inria. All rights reserved.
//

#ifndef MOREFEM_x_THIRD_PARTY_x_WRAPPERS_x_PETSC_x_SNES_MACRO_HPP_
# define MOREFEM_x_THIRD_PARTY_x_WRAPPERS_x_PETSC_x_SNES_MACRO_HPP_

GILLES Sebastien's avatar
GILLES Sebastien committed
14 15 16 17 18

// ============================
//! \cond IGNORE_BLOCK_IN_DOXYGEN
// ============================

19 20 21 22 23 24 25
# ifdef MOREFEM_NO_TRAP_SNES_EXCEPTION

#  define MOREFEM_TRAP_SNES_EXCEPTION_TRY
#  define MOREFEM_TRAP_SNES_EXCEPTION_CATCH(Snes)

# else // MOREFEM_NO_TRAP_SNES_EXCEPTION

GILLES Sebastien's avatar
GILLES Sebastien committed
26 27 28 29 30
/*!
 * If the macro is not defined, in standard SnesInterface functions exceptions are caught and transformed into
 * Petsc error codes. This prevent libc++ abi issues if exceptions are thrown from one of functions fed to Petsc
 * through a pointer.
 */
31 32 33 34 35 36
#  define MOREFEM_TRAP_SNES_EXCEPTION_TRY try
#  define MOREFEM_TRAP_SNES_EXCEPTION_CATCH(Snes) \
    catch(const std::exception& e) \
    { \
    std::cerr << "Exception caught in the Petsc Snes definition: " << e.what() << std::endl; \
    return PETSC_ERR_MIN_VALUE; \
37 38 39 40 41
    } \
    catch(Seldon::Error& e) \
    { \
    std::cerr << "Exception caught in the Petsc Snes definition: " << e.What() << std::endl; \
    return PETSC_ERR_MIN_VALUE; \
42 43 44 45 46
    }

# endif // MOREFEM_NO_TRAP_SNES_EXCEPTION


GILLES Sebastien's avatar
GILLES Sebastien committed
47 48 49 50 51
// ============================
//! \endcond IGNORE_BLOCK_IN_DOXYGEN
// ============================


52
#endif // MOREFEM_x_THIRD_PARTY_x_WRAPPERS_x_PETSC_x_SNES_MACRO_HPP_