On 9/17/19 6:58 PM, Doug wrote:
>
> /home/ddong/Libraries/dealii/include/deal.II/base/numbers.h:583:3:
> note: no known conversion for argument 1 from ‘const
> Sacado::Fad::DFad<double>’ to ‘const std::complex<long double>&’
> In file included from
> /home/ddong/Libraries/dealii/include/deal.II/base/cuda.h:21:0,
> from
> /home/ddong/Libraries/dealii/include/deal.II/base/memory_space.h:22,
> from
> /home/ddong/Libraries/dealii/include/deal.II/lac/la_parallel_vector.h:21,
> from
> /home/ddong/Libraries/dealii/source/lac/la_parallel_vector.cc:16:
> /home/ddong/Libraries/dealii/include/deal.II/base/exceptions.h:1671:42:
> error: no matching function for call to
> ‘std::complex<double>::complex(const Sacado::Fad::DFad<double>&)’
> dealii::ExcNumberNotFinite(std::complex<double>(number)))
>
> It is basically part of the same call to AssertIsFinite to generate the
> Exception. Note that it could hit this assertion much more directly
> since
> /home/ddong/Libraries/dealii/include/deal.II/lac/la_parallel_vector.templates.h
>
> itself calls AssertIsFinite. e.g. line 1450
But I don't know how we get there. What does the rest of the error
message look like? The place you show looks like this:
template <typename Number, typename MemorySpaceType>
void
Vector<Number, MemorySpaceType>::add(const Number a)
{
AssertIsFinite(a);
so 'a' is of type Sacado::Fad::DFad<double>. It then needs to call
numbers::is_finite (Sacado::Fad::DFad<double>), which doesn't exist.
It probably just tries to go through all of the overloads of
numbers::is_finite() and wants to see whether it can convert the
argument Sacado::Fad::DFad<double> to the argument type of these
overloads. The error message you show then would just explain why this
one possibility (namely, numbers::is_finite(std::complex<long double>&))
does not work. But that doesn't mean that this is the right overload
anyway -- I suspect that your compiler produces similar error messages
above or below the one you show for all of the other overloads, right?
I *think* that the solution is to simply provide an overload for
numbers::is_finite (const Sacado::Fad::DFad<double> &x)
Can you try this? You could declare it in your own .cc file before you
#include <deal.II/lac/la_parallel_vector.templates.h>
Best
W.
--
------------------------------------------------------------------------
Wolfgang Bangerth email: [email protected]
www: http://www.math.colostate.edu/~bangerth/
--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see
https://groups.google.com/d/forum/dealii?hl=en
---
You received this message because you are subscribed to the Google Groups
"deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/dealii/846b94a1-9c0c-babc-daa3-11653974365b%40colostate.edu.