[Dune-devel] dune-common update seems to cause error in my ParMetis routine

Christian Engwer christian.engwer at uni-muenster.de
Fri Jan 22 13:45:50 CET 2016


On Fri, Jan 22, 2016 at 01:41:43PM +0100, Aleksejs Fomins wrote:
> Dear Christian,
> 
> Thank you for your advice. After a brief look at the commit tree, I have found a commit 
> 
> 93f16b5ecdb60704cc9c369a9ee14f24708c506a
> 
> by Lars Lubkoll as of 2015-12-07 16:08:42, which adds the line
> 
> using real_t = typename FieldTraits<Type>::real_type;
> 
> to namespace Dune.
> 
> 
> Since curvilinear grid is inside namespace Dune, I suppose that including parmetis.h creates a name clash.
> 
> 
> Do you think that
> 
> namespace MyParmetis{
>   #include <parmetis.h>
> }
> 
> would be a good solution?

No! This will craete completely different names and linking will
fail. You will have to use proper scoping. ::real_t will refer to the
global name and not the one in the Dune namespace.

Christian

> Best,
> Aleksejs
> 
> 
> On 22.01.2016 13:14, Christian Engwer wrote:
> > Easiest wuld be a git bisect to identify te commit that caused the
> > problems.
> > 
> > Alternatively you can look at the preprocessor output.
> > 
> > Christian
> > 
> > On Fri, Jan 22, 2016 at 12:13:58PM +0100, Aleksejs Fomins wrote:
> >> Dear Markus,
> >>
> >> real_t is a datatype that is essentially float or double, as defined in <parmetis.h>, which is included in the file in question.
> >>
> >> In fact, the error disappears if I manually type
> >>
> >> typedef float real_t;
> >>
> >> inside of my code. However, this same line is already written in parmetis.h, and the compiler clearly sees this file, because it does not complain about other parmetis functions I use. What puzzles me is that the code compiles no problem with previous version of dune-common.
> >>
> >> Thanks,
> >> Aleksejs
> >>
> >>
> >> On 22.01.2016 12:07, Markus Blatt wrote:
> >>> Hi,
> >>>
> >>> On Fri, Jan 22, 2016 at 11:55:31AM +0100, Aleksejs Fomins wrote:
> >>>> My Parmetis code, which used to compile before, includes the following lines:
> >>>>
> >>>> ------------------------------------------------------------------------------
> >>>> #if PARMETIS_MAJOR_VERSION < 4
> >>>>       typedef idxtype idx_t;
> >>>>       typedef float real_t;
> >>>> #endif
> >>>>
> >>>> std::vector<real_t> tpwgts(ncon*nparts, 1./nparts);
> >>>> ------------------------------------------------------------------------------
> >>>>
> >>>> With the latest pull of dune-common, I get the following error
> >>>>
> >>>> ------------------------------------------------------------------------------
> >>>> /home/fomins/gitwork/hades-lspr-ag/dune-curvilineargrid/dune/curvilineargrid/io/file/curvilineargmshreader.hh:1124:25: error: type/value mismatch at argument 1 in template parameter list for ‘template<class _Tp, class _Alloc> class std::vector’
> >>>>        std::vector<real_t> tpwgts(ncon*nparts, 1./nparts);
> >>>>                          ^
> >>>> /home/fomins/gitwork/hades-lspr-ag/dune-curvilineargrid/dune/curvilineargrid/io/file/curvilineargmshreader.hh:1124:25: note:   expected a type, got ‘real_t’
> >>>> ------------------------------------------------------------------------------
> >>>>
> >>>> Would you be so kind as to suggest what caused this error and how to correct it?
> >>>
> >>> The error message is pretty clear: The compiler does not know real_t
> >>> for whatever reason. What is it supposed to be?
> >>>
> >>> Cheers,
> >>>
> >>> Markus
> >>>
> >>
> >> _______________________________________________
> >> Dune-devel mailing list
> >> Dune-devel at dune-project.org
> >> http://lists.dune-project.org/mailman/listinfo/dune-devel
> > 
> 

-- 
Prof. Dr. Christian Engwer 
Institut für Numerische und Angewandte Mathematik
Fachbereich Mathematik und Informatik der Universität Münster
Einsteinstrasse 62
48149 Münster

E-Mail  christian.engwer at uni-muenster.de
Telefon +49 251 83-35067
FAX     +49 251 83-32729




More information about the Dune-devel mailing list