]> https://gitweb.dealii.org/ - dealii.git/commit
Find a better way to be dimension independent. 3641/head
authorWolfgang Bangerth <bangerth@colostate.edu>
Mon, 28 Nov 2016 00:15:13 +0000 (17:15 -0700)
committerWolfgang Bangerth <bangerth@colostate.edu>
Mon, 28 Nov 2016 00:15:13 +0000 (17:15 -0700)
commite2dae1060ddde4a4e709c0644b8757b193cc0556
treee5855f3b034e52dd08680b1fd567ce552db3906c
parent876a16d1adcead0c22406ae8c02dd3f4e17117b7
Find a better way to be dimension independent.

This patch revises commit 9386b1e30c in #3639. There, I tried to avoid instantiating types
that have a template signature of the kind <3,spacedim> if spacedim is less than three,
since that leads to invalid types. I did so by using <3,max(3,spacedim)>, which works
because we can only get to these places if dim==3, and consequently spacedim>=3, but the
compiler may not always recognize that if spacedim<3, then we must be in dead code.

This patch goes the other way around, which I find conceptually clearer: in code where we
have
    if (dim == 3)
      {
        typename Triangulation<3,spacedim>::cell_iterator cell = ...;
we clearly only got into the 'if' block because dim==3. Consequently, we might as well
have written
    if (dim == 3)
      {
        typename Triangulation<dim,spacedim>::cell_iterator cell = ...;
to the same effect. On the plus side, however, whenever dim<3 (i.e. in cases where
this is dead code anyway), we still do not instantiate invalid types.

This patch therefore undoes the changes made in #3639 and replaces them with the second
option above. There are a number of places where we then have to replace calls to
    GeometryInfo<3>::...
by
    GeometryInfo<dim>::...
as well as one place where we have to do a cast from
    RefinementCase<3>
to
    RefinementCase<dim>
or the other way around; the latter is the identity cast if we do get into this block.
source/grid/tria_accessor.cc

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.