← Back to team overview

dolfin team mailing list archive

Re: Use of real/double

 

On Thu, Oct 02, 2008 at 08:00:02AM -0500, Matthew Knepley wrote:
> On Thu, Oct 2, 2008 at 6:23 AM, Anders Logg <logg@xxxxxxxxx> wrote:
> > We are currently using "real" (almost) everywhere in the code instead
> > of "double". real is a typedef for double defined in dolfin/common/types.h:
> >
> >  typedef double real;
> >
> > The reason for this typedef has been to prepare for changing from
> > double to another (higher) precision representation at some point in
> > the future.
> >
> > We (Benjamin Kehlet) have now tried to do this using GMP
> > (http://gmplib.org), but this fails for many reasons. For example,
> > standard math functions (abs, pow, exp) only work with double. Another
> > more obvious reason is dependencies on external libraries like PETSc,
> > UFC, libxml2, GTS etc where double is hard-coded.
> 
> Not exactly true. PETSc has the same typedef, PetscScalar, and can be
> run in extended precision (we have tried it). However in parallel, MPI has
> no types for these so things get harder there.
> 
>     Matt

ok. But even if we could make it work with PETSc, it's still a mess to
get it working with other dependencies.

-- 
Anders


> > Our conclusion is that there is little reason to keep the typedef in
> > DOLFIN since it is just an alias for double and it can not easily be
> > changed to anything else. I suggest we remove it and replace "real"
> > with "double" everywhere. Any objections to this?
> >
> > The reason we are experimenting with GMP is that we want to use the
> > ODE solvers to solve ODEs with very high precision. For this reason,
> > we are planning to
> >
> > 1. Put back typedef real (after first removing it) and only use it
> > under dolfin/ode/. If DOLFIN is built without GMP, it will just be a
> > typedef for double. Otherwise, it will be a GMP type.
> >
> > 2. Change the ODE solver interface from
> >
> >  void f(const uBLASVector& u, real t, uBLASVector& y);
> >
> > to
> >
> >  void f(const real* u, real t, real* y);
> >
> > uBLAS will be used internally (with some additional copying of data
> > from real to double).
> >
> > Any objections to this?
> >
> >
> > -----BEGIN PGP SIGNATURE-----
> > Version: GnuPG v1.4.6 (GNU/Linux)
> >
> > iD8DBQFI5K89TuwUCDsYZdERAsCzAJ4joC3Uhw+U9WbKq3UhXxA/eN4PjQCfWMhA
> > yWf5ZiJq12dczghGdCji5XA=
> > =XLC0
> > -----END PGP SIGNATURE-----
> >
> > _______________________________________________
> > DOLFIN-dev mailing list
> > DOLFIN-dev@xxxxxxxxxx
> > http://www.fenics.org/mailman/listinfo/dolfin-dev
> >
> >
> 
> 
> 

Attachment: signature.asc
Description: Digital signature


References