Skip to content

#1331 Transition from double to FieldTraits<field_type>::real_type

Metadata

Property Value
Reported by Christian Engwer (christi@conan.iwr.uni-heidelberg.de)
Reported at Aug 15, 2013 09:33
Type Bug Report
Version 2.2
Operating System Unspecified / All

Description

There are several places where we still use an explicit type of double instead of the generic FieldTraits<field_type>::real_type. Most Matrix implementations still use double for their norm, the same holds in several places in the solvers. There are some further suspect places.

Not all usage of double is a problem, as the interfaces to external libraries (like superlu) use specilizations for double.

Here is a first list, not necessarily complete:

./dune/istl/superlu.hh:587:       double def0=d.two_norm();
./dune/istl/schwarz.hh:164:    virtual double norm (const X& x)
./dune/istl/novlpschwarz.hh:289:    virtual double norm (const X& x)
./dune/istl/solvers.hh:142:      double def0 = _sp.norm(b);
./dune/istl/solvers.hh:166:        double defnew=_sp.norm(b);  // comp defect norm
./dune/istl/solvers.hh:281:      double def0 = _sp.norm(b); // compute norm
./dune/istl/solvers.hh:304:        double defnew=_sp.norm(b); // comp defect norm
./dune/istl/solvers.hh:413:      double def0 = _sp.norm(b); // compute norm
./dune/istl/solvers.hh:458:        double defnew=_sp.norm(b); // comp defect norm
./dune/istl/solvers.hh:1439:      double def0 = _sp.norm(b);    // compute norm
./dune/istl/solvers.hh:1479:      double defnew=_sp.norm(b);    // comp defect norm
./dune/istl/solvers.hh:1523:          double defnew=_sp.norm(b);        // comp defect norm
./dune/istl/owneroverlapcopy.hh:432:    double norm (const T1& x) const
./dune/istl/multitypeblockvector.hh:222:    static double result (const T& a) {             //result = sum of all elements' 2-norms
./dune/istl/multitypeblockvector.hh:285:    double two_norm2() const {return MultiTypeBlockVector_Norm<mpl::size<type>::value,type>::result(*this);}
./dune/istl/multitypeblockvector.hh:290:    double two_norm() const {return sqrt(this->two_norm2());}
./dune/istl/scalarproducts.hh:58:    virtual double norm (const X& x) = 0;
./dune/istl/scalarproducts.hh:116:    virtual double norm (const X& x)
./dune/istl/bcrsmatrix.hh:1178:    double frobenius_norm2 () const
./dune/istl/bcrsmatrix.hh:1194:    double frobenius_norm () const
./dune/istl/bcrsmatrix.hh:1200:    double infinity_norm () const
./dune/istl/bcrsmatrix.hh:1216:    double infinity_norm_real () const
./dune/istl/test/complexrhstest.cc:60:    const double errorNorm = m_b.two_norm();
./dune/istl/test/matrixtest.cc:244:  double frobenius_norm = matrix.frobenius_norm();
./dune/istl/scaledidmatrix.hh:347:    double frobenius_norm () const
./dune/istl/scaledidmatrix.hh:353:    double frobenius_norm2 () const
./dune/istl/scaledidmatrix.hh:359:    double infinity_norm () const
./dune/istl/scaledidmatrix.hh:365:    double infinity_norm_real () const
./dune/istl/matrix.hh:488:    double frobenius_norm () const
./dune/istl/matrix.hh:494:    double frobenius_norm2 () const
./dune/istl/matrix.hh:504:    double infinity_norm () const
./dune/istl/matrix.hh:517:    double infinity_norm_real () const