15#ifndef dealii_exceptions_h
16#define dealii_exceptions_h
21#include <Kokkos_Macros.hpp>
22#if KOKKOS_VERSION >= 40200
23# include <Kokkos_Abort.hpp>
25# include <Kokkos_Core.hpp>
85 const
char *exc_name);
92 what() const noexcept override;
152#ifdef DEAL_II_HAVE_GLIBC_STACKTRACE
191# define DeclException0(Exception0) \
192 class Exception0 : public ::ExceptionBase \
215# define DeclExceptionMsg(Exception, defaulttext) \
216 class Exception : public ::ExceptionBase \
219 Exception(const std::string &msg = defaulttext) \
222 virtual ~Exception() noexcept \
225 print_info(std::ostream &out) const override \
227 out << " " << arg << std::endl; \
231 const std::string arg; \
251# define DeclException1(Exception1, type1, outsequence) \
252 class Exception1 : public ::ExceptionBase \
255 Exception1(type1 const &a1) \
258 virtual ~Exception1() noexcept \
261 print_info(std::ostream &out) const override \
263 out << " " outsequence << std::endl; \
288# define DeclException2(Exception2, type1, type2, outsequence) \
289 class Exception2 : public ::ExceptionBase \
292 Exception2(type1 const &a1, type2 const &a2) \
296 virtual ~Exception2() noexcept \
299 print_info(std::ostream &out) const override \
301 out << " " outsequence << std::endl; \
327# define DeclException3(Exception3, type1, type2, type3, outsequence) \
328 class Exception3 : public ::ExceptionBase \
331 Exception3(type1 const &a1, type2 const &a2, type3 const &a3) \
336 virtual ~Exception3() noexcept \
339 print_info(std::ostream &out) const override \
341 out << " " outsequence << std::endl; \
368# define DeclException4(Exception4, type1, type2, type3, type4, outsequence) \
369 class Exception4 : public ::ExceptionBase \
372 Exception4(type1 const &a1, \
381 virtual ~Exception4() noexcept \
384 print_info(std::ostream &out) const override \
386 out << " " outsequence << std::endl; \
414# define DeclException5( \
415 Exception5, type1, type2, type3, type4, type5, outsequence) \
416 class Exception5 : public ::ExceptionBase \
419 Exception5(type1 const &a1, \
430 virtual ~Exception5() noexcept \
433 print_info(std::ostream &out) const override \
435 out << " " outsequence << std::endl; \
466# define DeclException0(Exception0) \
468 static ::ExceptionBase &Exception0()
489# define DeclExceptionMsg(Exception, defaulttext) \
492 static ::ExceptionBase &Exception()
511# define DeclException1(Exception1, type1, outsequence) \
514 static ::ExceptionBase &Exception1(type1 arg1)
534# define DeclException2(Exception2, type1, type2, outsequence) \
537 static ::ExceptionBase &Exception2(type1 arg1, type2 arg2)
557# define DeclException3(Exception3, type1, type2, type3, outsequence) \
560 static ::ExceptionBase &Exception3(type1 arg1, type2 arg2, type3 arg3)
580# define DeclException4(Exception4, type1, type2, type3, type4, outsequence) \
583 static ::ExceptionBase &Exception4(type1 arg1, \
606# define DeclException5( \
607 Exception5, type1, type2, type3, type4, type5, outsequence) \
610 static ::ExceptionBase &Exception5( \
611 type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5)
638 "A piece of code is attempting a division by zero. This is "
639 "likely going to lead to results that make no sense.");
653 std::complex<double>,
654 <<
"In a significant number of places, deal.II checks that some intermediate "
655 <<
"value is a finite number (as opposed to plus or minus infinity, or "
656 <<
"NaN/Not a Number). In the current function, we encountered a number "
657 <<
"that is not finite (its value is " << arg1 <<
" and therefore "
658 <<
"violates the current assertion).\n\n"
659 <<
"This may be due to the fact that some operation in this function "
660 <<
"created such a value, or because one of the arguments you passed "
661 <<
"to the function already had this value from some previous "
662 <<
"operation. In the latter case, this function only triggered the "
663 <<
"error but may not actually be responsible for the computation of "
664 <<
"the number that is not finite.\n\n"
665 <<
"There are two common cases where this situation happens. First, your "
666 <<
"code (or something in deal.II) divides by zero in a place where this "
667 <<
"should not happen. Or, you are trying to solve a linear system "
668 <<
"with an unsuitable solver (such as an indefinite or non-symmetric "
669 <<
"linear system using a Conjugate Gradient solver); such attempts "
670 <<
"oftentimes yield an operation somewhere that tries to divide "
671 <<
"by zero or take the square root of a negative value.\n\n"
672 <<
"In any case, when trying to find the source of the error, "
673 <<
"recall that the location where you are getting this error is "
674 <<
"simply the first place in the program where there is a check "
675 <<
"that a number (e.g., an element of a solution vector) is in fact "
676 <<
"finite, but that the actual error that computed the number "
677 <<
"may have happened far earlier. To find this location, you "
678 <<
"may want to add checks for finiteness in places of your "
679 <<
"program visited before the place where this error is produced. "
680 <<
"One way to check for finiteness is to use the 'AssertIsFinite' "
688 "Your program tried to allocate some memory but this "
689 "allocation failed. Typically, this either means that "
690 "you simply do not have enough memory in your system, "
691 "or that you are (erroneously) trying to allocate "
692 "a chunk of memory that is simply beyond all reasonable "
693 "size, for example because the size of the object has "
694 "been computed incorrectly."
696 "In the current case, the request was for "
697 << arg1 <<
" bytes.");
705 <<
"Destroying memory handler while " << arg1
706 <<
" objects are still allocated.");
712 "An input/output error has occurred. There are a number of "
713 "reasons why this may be happening, both for reading and "
714 "writing operations."
716 "If this happens during an operation that tries to read "
717 "data: First, you may be "
718 "trying to read from a file that doesn't exist or that is "
719 "not readable given its file permissions. Second, deal.II "
720 "uses this error at times if it tries to "
721 "read information from a file but where the information "
722 "in the file does not correspond to the expected format. "
723 "An example would be a truncated file, or a mesh file "
724 "that contains not only sections that describe the "
725 "vertices and cells, but also sections for additional "
726 "data that deal.II does not understand."
728 "If this happens during an operation that tries to write "
729 "data: you may be trying to write to a file to which file "
730 "or directory permissions do not allow you to write. A "
731 "typical example is where you specify an output file in "
732 "a directory that does not exist.");
742 <<
"Could not open file " << arg1
745 "If this happens during an operation that tries to read "
747 "trying to read from a file that doesn't exist or that is "
748 "not readable given its file permissions."
750 "If this happens during an operation that tries to write "
751 "data: you may be trying to write to a file to which file "
752 "or directory permissions do not allow you to write. A "
753 "typical example is where you specify an output file in "
754 "a directory that does not exist.");
765 "You are trying to use functionality in deal.II that is "
766 "currently not implemented. In many cases, this indicates "
767 "that there simply didn't appear much of a need for it, or "
768 "that the author of the original code did not have the "
769 "time to implement a particular case. If you hit this "
770 "exception, it is therefore worth the time to look into "
771 "the code to find out whether you may be able to "
772 "implement the missing functionality. If you do, please "
773 "consider providing a patch to the deal.II development "
774 "sources (see the deal.II website on how to contribute).");
797 "This exception -- which is used in many places in the "
798 "library -- usually indicates that some condition which "
799 "the author of the code thought must be satisfied at a "
800 "certain point in an algorithm, is not fulfilled. An "
801 "example would be that the first part of an algorithm "
802 "sorts elements of an array in ascending order, and "
803 "a second part of the algorithm later encounters an "
804 "element that is not larger than the previous one."
806 "There is usually not very much you can do if you "
807 "encounter such an exception since it indicates an error "
808 "in deal.II, not in your own program. Try to come up with "
809 "the smallest possible program that still demonstrates "
810 "the error and contact the deal.II mailing lists with it "
821 "You (or a place in the library) are trying to call a "
822 "function that is declared as a virtual function in a "
823 "base class but that has not been overridden in your "
826 "This exception happens in cases where the base class "
827 "cannot provide a useful default implementation for "
828 "the virtual function, but where we also do not want "
829 "to mark the function as abstract (i.e., with '=0' at the end) "
830 "because the function is not essential to the class in many "
831 "contexts. In cases like this, the base class provides "
832 "a dummy implementation that makes the compiler happy, but "
833 "that then throws the current exception."
835 "A concrete example would be the 'Function' class. It declares "
836 "the existence of 'value()' and 'gradient()' member functions, "
837 "and both are marked as 'virtual'. Derived classes have to "
838 "override these functions for the values and gradients of a "
839 "particular function. On the other hand, not every function "
840 "has a gradient, and even for those that do, not every program "
841 "actually needs to evaluate it. Consequently, there is no "
842 "*requirement* that a derived class actually override the "
843 "'gradient()' function (as there would be had it been marked "
844 "as abstract). But, since the base class cannot know how to "
845 "compute the gradient, if a derived class does not override "
846 "the 'gradient()' function and it is called anyway, then the "
847 "default implementation in the base class will simply throw "
850 "The exception you see is what happens in cases such as the "
851 "one just illustrated. To fix the problem, you need to "
852 "investigate whether the function being called should indeed have "
853 "been called; if the answer is 'yes', then you need to "
854 "implement the missing override in your class.");
861 <<
"Please provide an implementation for the function \""
871 <<
"The function \"" << arg1 <<
"\" returned the nonzero value " << arg2
872 <<
", but the calling site expected the return value to be zero. "
873 "This error often happens when the function in question is a 'callback', "
874 "that is a user-provided function called from somewhere within deal.II "
875 "or within an external library such as PETSc, Trilinos, SUNDIALS, etc., "
876 "that expect these callbacks to indicate errors via nonzero return "
897 <<
"You are trying to execute functionality that is "
898 <<
"impossible in " << arg1
899 <<
"d or simply does not make any sense.");
911 <<
"You are trying to execute functionality that is "
912 <<
"impossible in dimensions <" << arg1 <<
',' << arg2
913 <<
"> or simply does not make any sense.");
920 "In a check in the code, deal.II encountered a zero in "
921 "a place where this does not make sense. See the condition "
922 "that was being checked and that is printed further up "
923 "in the error message to get more information on what "
924 "the erroneous zero corresponds to.");
931 "The object you are trying to access is empty but it makes "
932 "no sense to attempt the operation you are trying on an "
945 <<
"Two sizes or dimensions were supposed to be equal, "
946 <<
"but aren't. They are " << arg1 <<
" and " << arg2 <<
'.');
956 <<
"Two integers should be equal to each other after a type conversion but "
957 <<
"aren't. A typical cause of this problem is that the integral types "
958 <<
"used by deal.II and an external library are different (e.g., one uses "
959 <<
"32-bit integers and the other uses 64-bit integers). The integers are "
960 << arg1 <<
" and " << arg2 <<
'.');
970 <<
"The size or dimension of one object, " << arg1
971 <<
" was supposed to be "
972 <<
"equal to one of two values, but isn't. The two possible "
973 <<
"values are " << arg2 <<
" and " << arg3 <<
'.');
992 <<
"Index " << arg1 <<
" is not in the half-open range [" << arg2 <<
','
995 " In the current case, this half-open range is in fact empty, "
996 "suggesting that you are accessing an element of an empty "
997 "collection such as a vector that has not been set to the "
1016 template <
typename T>
1022 <<
"Index " << arg1 <<
" is not in the half-open range [" << arg2 <<
','
1025 " In the current case, this half-open range is in fact empty, "
1026 "suggesting that you are accessing an element of an empty "
1027 "collection such as a vector that has not been set to the "
1037 <<
"Number " << arg1 <<
" must be larger than or equal "
1043 template <
typename T>
1047 <<
"Number " << arg1 <<
" must be larger than or equal "
1057 <<
"Division " << arg1 <<
" by " << arg2
1058 <<
" has remainder different from zero.");
1069 "You are trying to use an iterator, but the iterator is "
1070 "in an invalid state. This may indicate that the iterator "
1071 "object has not been initialized, or that it has been "
1072 "moved beyond the end of the range of valid elements.");
1079 "You are trying to use an iterator, but the iterator is "
1080 "pointing past the end of the range of valid elements. "
1081 "It is not valid to dereference the iterator in this "
1103 "You are trying an operation on a vector that is only "
1104 "allowed if the vector has no ghost elements, but the "
1105 "vector you are operating on does have ghost elements."
1107 "Specifically, there are two kinds of operations that "
1108 "are typically not allowed on vectors with ghost elements. "
1109 "First, vectors with ghost elements are read-only "
1110 "and cannot appear in operations that write into these "
1111 "vectors. Second, reduction operations (such as computing "
1112 "the norm of a vector, or taking dot products between "
1113 "vectors) are not allowed to ensure that each vector "
1114 "element is counted only once (as opposed to once for "
1115 "the owner of the element plus once for each process "
1116 "on which the element is stored as a ghost copy)."
1118 "See the glossary entry on 'Ghosted vectors' for more "
1127 <<
"Something went wrong when making cell " << arg1
1128 <<
". Read the docs and the source code "
1129 <<
"for more information.");
1139 "You are trying an operation of the form 'vector = C', "
1140 "'matrix = C', or 'tensor = C' with a nonzero scalar value "
1141 "'C'. However, such assignments are only allowed if the "
1142 "C is zero, since the semantics for assigning any other "
1143 "value are not clear. For example: one could interpret "
1144 "assigning a matrix a value of 1 to mean the matrix has a "
1145 "norm of 1, the matrix is the identity matrix, or the "
1146 "matrix contains only 1s. Similar problems exist with "
1147 "vectors and tensors. Hence, to avoid this ambiguity, such "
1148 "assignments are not permitted.");
1155 "You are attempting to use functionality that is only available "
1156 "if deal.II was configured to use LAPACK, but cmake did not "
1157 "find a valid LAPACK library.");
1164 "You are attempting to use functionality that requires that deal.II is configured "
1165 "with HDF5 support. However, when you called 'cmake', HDF5 support "
1166 "was not detected.");
1173 "You are attempting to use functionality that is only available "
1174 "if deal.II was configured to use MPI.");
1181 "You are attempting to use functionality that is only available "
1182 "if deal.II was configured to use the function parser which "
1183 "relies on the muparser library, but cmake did not "
1184 "find a valid muparser library on your system and also did "
1185 "not choose the one that comes bundled with deal.II.");
1192 "You are attempting to use functionality that is only available "
1193 "if deal.II was configured to use Assimp, but cmake did not "
1194 "find a valid Assimp library.");
1203 "You are attempting to use functionality that is only available if deal.II "
1204 "was configured to use Trilinos' SEACAS library (which provides ExodusII), "
1205 "but cmake did not find a valid SEACAS library.");
1212 "You are attempting to use functionality that is only available "
1213 "if deal.II was configured to use CGAL, but cmake did not "
1214 "find a valid CGAL library.");
1216#ifdef DEAL_II_WITH_MPI
1244 print_info(std::ostream &out)
const override;
1252#ifdef DEAL_II_TRILINOS_WITH_SEACAS
1269 ExcExodusII(
const int error_code);
1275 print_info(std::ostream &out)
const override;
1280 const int error_code;
1290 "A user call-back function encountered a recoverable error, "
1291 "but the underlying library that called the call-back did not "
1292 "manage to recover from the error and aborted its operation."
1294 "See the glossary entry on user call-back functions for more "
1432 template <
typename ExceptionType>
1437 const char *function,
1439 const char *exc_name,
1442 static_assert(std::is_base_of_v<ExceptionBase, ExceptionType>,
1443 "The provided exception must inherit from ExceptionBase.");
1445 e.set_fields(file, line, function, cond, exc_name);
1451 if (::deal_II_exceptions::internals::
1466 throw ::StandardExceptions::ExcInternalError();
1484 template <
typename ExceptionType>
1488 const char *function,
1490 const char *exc_name,
1491 ExceptionType e)
noexcept
1493 static_assert(std::is_base_of_v<ExceptionBase, ExceptionType>,
1494 "The provided exception must inherit from ExceptionBase.");
1496 e.set_fields(file, line, function, cond, exc_name);
1533# if KOKKOS_VERSION >= 30600
1534# ifdef DEAL_II_HAVE_BUILTIN_EXPECT
1535# define Assert(cond, exc) \
1538 KOKKOS_IF_ON_HOST(({ \
1539 if (__builtin_expect(!(cond), false)) \
1540 ::deal_II_exceptions::internals::issue_error_noreturn( \
1541 ::deal_II_exceptions::internals::ExceptionHandling:: \
1542 abort_or_throw_on_exception, \
1545 __PRETTY_FUNCTION__, \
1550 KOKKOS_IF_ON_DEVICE(({ \
1552 Kokkos::abort(#cond); \
1557# define Assert(cond, exc) \
1560 KOKKOS_IF_ON_HOST(({ \
1562 ::deal_II_exceptions::internals::issue_error_noreturn( \
1563 ::deal_II_exceptions::internals::ExceptionHandling:: \
1564 abort_or_throw_on_exception, \
1567 __PRETTY_FUNCTION__, \
1572 KOKKOS_IF_ON_DEVICE(({ \
1574 Kokkos::abort(#cond); \
1580# ifdef KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST
1581# ifdef DEAL_II_HAVE_BUILTIN_EXPECT
1582# define Assert(cond, exc) \
1585 if (__builtin_expect(!(cond), false)) \
1586 ::deal_II_exceptions::internals::issue_error_noreturn( \
1587 ::deal_II_exceptions::internals::ExceptionHandling:: \
1588 abort_or_throw_on_exception, \
1591 __PRETTY_FUNCTION__, \
1598# define Assert(cond, exc) \
1602 ::deal_II_exceptions::internals::issue_error_noreturn( \
1603 ::deal_II_exceptions::internals::ExceptionHandling:: \
1604 abort_or_throw_on_exception, \
1607 __PRETTY_FUNCTION__, \
1615# define Assert(cond, exc) \
1619 Kokkos::abort(#cond); \
1625# ifdef DEAL_II_HAVE_CXX20
1632# define Assert(cond, exc) \
1635 typename std::remove_reference<decltype(cond)>::type \
1636 *dealii_assert_variable_a = nullptr; \
1637 typename std::remove_reference<decltype(exc)>::type \
1638 *dealii_assert_variable_b = nullptr; \
1639 (void)dealii_assert_variable_a; \
1640 (void)dealii_assert_variable_b; \
1644# define Assert(cond, exc) \
1681# ifdef DEAL_II_HAVE_BUILTIN_EXPECT
1682# define AssertNothrow(cond, exc) \
1685 if (__builtin_expect(!(cond), false)) \
1686 ::deal_II_exceptions::internals::issue_error_nothrow( \
1687 __FILE__, __LINE__, __PRETTY_FUNCTION__, #cond, #exc, exc); \
1691# define AssertNothrow(cond, exc) \
1695 ::deal_II_exceptions::internals::issue_error_nothrow( \
1696 __FILE__, __LINE__, __PRETTY_FUNCTION__, #cond, #exc, exc); \
1701# define AssertNothrow(cond, exc) \
1735#ifdef DEAL_II_HAVE_BUILTIN_EXPECT
1736# define AssertThrow(cond, exc) \
1739 if (__builtin_expect(!(cond), false)) \
1740 ::deal_II_exceptions::internals::issue_error_noreturn( \
1741 ::deal_II_exceptions::internals::ExceptionHandling:: \
1742 throw_on_exception, \
1745 __PRETTY_FUNCTION__, \
1752# define AssertThrow(cond, exc) \
1756 ::deal_II_exceptions::internals::issue_error_noreturn( \
1757 ::deal_II_exceptions::internals::ExceptionHandling:: \
1758 throw_on_exception, \
1761 __PRETTY_FUNCTION__, \
1811#define DEAL_II_NOT_IMPLEMENTED() \
1812 ::deal_II_exceptions::internals::issue_error_noreturn( \
1813 ::deal_II_exceptions::internals::ExceptionHandling:: \
1814 abort_or_throw_on_exception, \
1817 __PRETTY_FUNCTION__, \
1820 ::StandardExceptions::ExcNotImplemented())
1894#define DEAL_II_ASSERT_UNREACHABLE() \
1895 ::deal_II_exceptions::internals::issue_error_noreturn( \
1896 ::deal_II_exceptions::internals::ExceptionHandling:: \
1897 abort_or_throw_on_exception, \
1900 __PRETTY_FUNCTION__, \
1903 ::StandardExceptions::ExcMessage( \
1904 "The program has hit a line of code that the programmer " \
1905 "marked with the macro DEAL_II_ASSERT_UNREACHABLE() to " \
1906 "indicate that the program should never reach this " \
1907 "location. You will have to find out (best done in a " \
1908 "debugger) why that happened. Typical reasons include " \
1909 "passing invalid arguments to functions (for example, if " \
1910 "a function takes an 'enum' with two possible values " \
1911 "as argument, but you call the function with a third " \
1912 "value), or if the programmer of the code that triggered " \
1913 "the error believed that a variable can only have " \
1914 "specific values, but either that assumption is wrong " \
1915 "or the computation of that value is buggy." \
1917 "In those latter conditions, where some internal " \
1918 "assumption is not satisfied, there may not be very " \
1919 "much you can do if you encounter such an exception, " \
1920 "since it indicates an error in deal.II, not in your " \
1921 "own program. If that is the situation you encounter, " \
1922 "try to come up with " \
1923 "the smallest possible program that still demonstrates " \
1924 "the error and contact the deal.II mailing lists with it " \
1937 template <
typename T,
typename U>
1941 using common_type = std::common_type_t<T, U>;
1942 return static_cast<common_type
>(t) ==
static_cast<common_type
>(u);
1951 template <
typename T,
typename U>
1955 using common_type = std::common_type_t<T, U>;
1956 return (
static_cast<common_type
>(t) <
static_cast<common_type
>(u));
1982#define AssertDimension(dim1, dim2) \
1983 Assert(::deal_II_exceptions::internals::compare_for_equality(dim1, \
1985 ::ExcDimensionMismatch((dim1), (dim2)))
1995#define AssertIntegerConversion(index1, index2) \
1996 Assert(::deal_II_exceptions::internals::compare_for_equality( \
1998 ::ExcInvalidIntegerConversion((index1), (index2)))
2004#define AssertThrowIntegerConversion(index1, index2) \
2005 AssertThrow(::deal_II_exceptions::internals::compare_for_equality( \
2007 ::ExcInvalidIntegerConversion((index1), (index2)))
2026#define AssertVectorVectorDimension(VEC, DIM1, DIM2) \
2027 AssertDimension(VEC.size(), DIM1); \
2028 for (const auto &subvector : VEC) \
2031 AssertDimension(subvector.size(), DIM2); \
2039 template <
typename F>
2042 template <
typename T,
typename U>
2048 template <
typename F>
2071#define AssertIndexRange(index, range) \
2072 Assert(::deal_II_exceptions::internals::compare_less_than(index, \
2074 ExcIndexRangeType<::internal::argument_type_t<void( \
2075 std::common_type_t<decltype(index), decltype(range)>)>>((index), \
2098#define AssertIsFinite(number) \
2099 Assert(::numbers::is_finite(number), \
2100 ::ExcNumberNotFinite(std::complex<double>(number)))
2107#define AssertIsNotUsed(obj) Assert((obj)->used() == false, ExcInternalError())
2109#ifdef DEAL_II_WITH_MPI
2130# define AssertThrowMPI(error_code) \
2131 AssertThrow(error_code == MPI_SUCCESS, ::ExcMPI(error_code))
2133# define AssertThrowMPI(error_code) \
2140#ifdef DEAL_II_TRILINOS_WITH_SEACAS
2158# define AssertThrowExodusII(error_code) \
2159 AssertThrow(error_code == 0, \
2160 ::StandardExceptions::ExcExodusII(error_code));
void generate_message() const
void print_stack_trace(std::ostream &out) const
const char * get_exc_name() const
virtual ~ExceptionBase() noexcept override=default
void set_fields(const char *file, const int line, const char *function, const char *cond, const char *exc_name)
virtual void print_info(std::ostream &out) const
virtual const char * what() const noexcept override
void print_exc_data(std::ostream &out) const
void * raw_stacktrace[25]
virtual void print_info(std::ostream &out) const override
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
static ::ExceptionBase & ExcIndexRangeType(T arg1, T arg2, T arg3)
static ::ExceptionBase & ExcImpossibleInDimSpacedim(int arg1, int arg2)
#define DeclException0(Exception0)
static ::ExceptionBase & ExcInvalidIterator()
static ::ExceptionBase & ExcOutOfMemory(std::size_t arg1)
static ::ExceptionBase & ExcIO()
static ::ExceptionBase & ExcGhostsPresent()
static ::ExceptionBase & ExcFileNotOpen(std::string arg1)
static ::ExceptionBase & ExcZero()
static ::ExceptionBase & ExcNeedsAssimp()
static ::ExceptionBase & ExcNeedsFunctionparser()
static ::ExceptionBase & ExcNotMultiple(int arg1, int arg2)
static ::ExceptionBase & ExcNotImplemented()
static ::ExceptionBase & ExcNeedsMPI()
static ::ExceptionBase & ExcFunctionNotProvided(std::string arg1)
static ::ExceptionBase & ExcEmptyObject()
static ::ExceptionBase & ExcScalarAssignmentOnlyForZeroValue()
static ::ExceptionBase & ExcMemoryLeak(int arg1)
static ::ExceptionBase & ExcLowerRangeType(T arg1, T arg2)
static ::ExceptionBase & ExcImpossibleInDim(int arg1)
static ::ExceptionBase & ExcIteratorPastEnd()
static ::ExceptionBase & ExcNeedsExodusII()
static ::ExceptionBase & ExcDimensionMismatch2(std::size_t arg1, std::size_t arg2, std::size_t arg3)
#define DeclException2(Exception2, type1, type2, outsequence)
static ::ExceptionBase & ExcLowerRange(int arg1, int arg2)
static ::ExceptionBase & ExcGridHasInvalidCell(int arg1)
static ::ExceptionBase & ExcNumberNotFinite(std::complex< double > arg1)
static ::ExceptionBase & ExcPureFunctionCalled()
#define DeclExceptionMsg(Exception, defaulttext)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcDivideByZero()
static ::ExceptionBase & ExcNeedsHDF5()
static ::ExceptionBase & ExcNeedsLAPACK()
#define DeclException3(Exception3, type1, type2, type3, outsequence)
static ::ExceptionBase & ExcNeedsCGAL()
static ::ExceptionBase & ExcIndexRange(std::size_t arg1, std::size_t arg2, std::size_t arg3)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcNotInitialized()
static ::ExceptionBase & ExcInvalidState()
#define DeclException1(Exception1, type1, outsequence)
static ::ExceptionBase & RecoverableUserCallbackError()
static ::ExceptionBase & ExcInvalidIntegerConversion(long long arg1, long long arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
static ::ExceptionBase & ExcFunctionNonzeroReturn(std::string arg1, int arg2)
constexpr bool compare_less_than(const T &t, const U &u)
constexpr bool compare_for_equality(const T &t, const U &u)
void issue_error_noreturn(ExceptionHandling handling, const char *file, int line, const char *function, const char *cond, const char *exc_name, ExceptionType e)
@ abort_or_throw_on_exception
void abort(const ExceptionBase &exc) noexcept
void do_issue_error_nothrow(const ExceptionBase &e) noexcept
bool allow_abort_on_exception
void issue_error_nothrow(const char *file, int line, const char *function, const char *cond, const char *exc_name, ExceptionType e) noexcept
void enable_abort_on_exception()
void disable_abort_on_exception()
void set_additional_assert_output(const char *const p)
void suppress_stacktrace_in_exceptions()
typename argument_type< F >::type argument_type_t
#define DEAL_II_HOST_DEVICE