David Wells [Sat, 7 May 2016 23:28:26 +0000 (19:28 -0400)]
Get around a GCC 6 warning.
GCC 6.1 now warns (-Waddress) that (since the dynamic cast of an object
back to its own type always succeeds) the address of an object is always
nonzero, so these casts result in tautologies for valid vector types.
David Wells [Sat, 7 May 2016 23:34:19 +0000 (19:34 -0400)]
Use index sets to simplify some assertions.
GCC 6.1 now warns (-Waddress) that (since the dynamic cast of an object
back to its own type always succeeds) the address of an object is always
nonzero. Fortunately these dynamic casts are not needed anymore due to
better support for generic programming in the library.
Since local_size is not available for scalar vectors, perform (stricter)
checks with index sets instead.
Regardless of the new GCC warning, these assertions are useful for all
distributed vectors (and may be run now for sequential vectors too) and
dof handler type, so they should always be checked.
David Wells [Sun, 28 Feb 2016 21:08:06 +0000 (16:08 -0500)]
Avoid boost functions that don't work on BSDs.
As was noted in issue #2261, the function boost::math::iround cannot be
used on some BSD variants due to the following compilation error:
In file included from /root/workspace/dealii/source/lac/lapack_full_matrix.cc:25:
In file included from /usr/local/include/boost/math/special_functions/round.hpp:15:
In file included from /usr/local/include/boost/math/special_functions/fpclassify.hpp:19:
In file included from /usr/local/include/boost/math/special_functions/math_fwd.hpp:26:
In file included from /usr/local/include/boost/math/special_functions/detail/round_fwd.hpp:12:
/usr/local/include/boost/math/tools/promotion.hpp:141:10: error: static_assert failed
"Sorry, but this platform does not have sufficient long double support for the special functions to be reliably implemented."
BOOST_STATIC_ASSERT_MSG((0 == ::boost::is_same<type, long
double>::value),
"Sorry, but this platform does not have sufficient long double support for the special functions to be reliably implement ed.");
/usr/local/include/boost/static_assert.hpp:31:45: note: expanded from macro 'BOOST_STATIC_ASSERT_MSG'
Since we only use iround for clarity this is not hard to work around.
A note on the implementation: LAPACK functions can usually be run in two
different modes. In the first, they compute the optimal size of the work
array. In the second they actually execute the function. Therefore
all we need to do is make the work arrays one longer and we should still
get the same performance out of LAPACK without needing to worry about
any unforeseen roundoff issues.
Timo Heister [Thu, 25 Feb 2016 17:21:49 +0000 (12:21 -0500)]
fix incorrect MPI_Allgather
MPI_Allgather in compute_local_to_global_vertex_index_map() was using
the wrong data type, which probably lead to wrong results or at least
illegal memory access.
Timo Heister [Sun, 14 Feb 2016 15:15:33 +0000 (10:15 -0500)]
fix cmake 3.3 warning about code-gallery.h
cmake 3.3 will warn about CMP0058 and is unable to compile the documentation
when using Ninja:
This project specifies custom command DEPENDS on files in the build tree
that are not specified as the OUTPUT or BYPRODUCTS of any
add_custom_command or add_custom_target:
doc/doxygen/code-gallery/code-gallery.h
We have to jump through a few hoops to make this work: Generating a
dependency to a source file generated in a subdirectory CMakeLists.txt
requires a custom command attached to a custom_target. Because ADD_DEPENDENCIES
only allows custom_targets not custom_commands, we have to add another dummy.
Timo Heister [Sun, 14 Feb 2016 13:47:14 +0000 (08:47 -0500)]
suppress more warnings in external libs
this suppresses:
/ssd/libs-candi/trilinos-12.4.2-Source/include/Amesos2_Superludist_FunctionMap.hpp:285:17: warning: comparison of constant 67 with expression of type 'SLUD::DiagScale_t' is always false [-Wtautological-constant-out-of-range-compare]
char eq = AMESOS2_SLUD_GET_EQUED(*equed);
and
/ssd/libs-candi/trilinos-12.4.2-Source/include/Tpetra_Experimental_BlockCrsMatrix_def.hpp:2826:3: warning: all paths through this function will call itself [-Winfinite-recursion]
Timo Heister [Wed, 10 Feb 2016 18:09:04 +0000 (13:09 -0500)]
disable gcc warning
In file included from /usr/include/c++/4.8/cassert:43:0,
from /ssd/libs-
candi/boost_1_60_0/include/boost/property_tree/detail/json_parser/narrow_encoding.hpp:6,
from /ssd/libs-
candi/boost_1_60_0/include/boost/property_tree/detail/json_parser/read.hpp:14,
from /ssd/libs-
candi/boost_1_60_0/include/boost/property_tree/json_parser.hpp:16,
from /ssd/deal-git/source/base/parameter_handler.cc:26:
/ssd/libs-
candi/boost_1_60_0/include/boost/property_tree/detail/json_parser/narrow_encoding.hpp:
In member function ‘char
boost::property_tree::json_parser::detail::utf8_utf8_encoding::to_internal_trivial(char)
const’:
/ssd/libs-
candi/boost_1_60_0/include/boost/property_tree/detail/json_parser/narrow_encoding.hpp:71:25:
warning: comparison is always true due to limited range of data type
[-Wtype-limits]
assert(c <= 0x7f);
Timo Heister [Mon, 8 Feb 2016 14:20:18 +0000 (09:20 -0500)]
fix several scary MPI bugs
I am surprised the code in question used to work at all because we are just
overwriting random memory. I detected those using clang's argument type
warnings and extensible clang type annotation within MPICH.