[Dune] Vec --> FieldVector

Oliver Sander sander at math.fu-berlin.de
Mon Oct 18 10:48:21 CEST 2004


> Das heisst fvector.hh und fmatrix.hh wandern nach dune/common ?!
> Schnief...
>

Yep!  Und gleich kommen sie, die Änderungen (es geht doch nichts
über lange Bahnfahrten).

Es gibt noch ein paar Anmerkungen:

1) FieldVector hat zwei neue Konstruktoren bekommen, und zwar
    den leeren Konstruktor und den, der einen Eintrag bekommt
    und damit den ganzen Vektor überschreibt.  Die wurden
    im Code gebraucht.  Sollten sie in FieldVector unerwünscht
    sein, so muß man Dinge in den Gittern ändern.
2) Von den Gittern werden teilweise Vektoren der Länge 0
    erzeugt.  Das mag gcc nicht.  In Vec wurde das so umgangen,
    daß immer mindestens ein Eintrag erzeugt wurde.  Diesen
    Mechanismus habe ich jetzt auch in FieldVector eingebaut.
    Ob das die optimale Lösung ist, darüber darf gestritten
    werden.
3) Vec hatte einen operator() mit der gleichen Semantik wie
    operator[].  Der Compiler beschwert sich aber nur über
    den fehlenden operator(), wenn die aufrufende Routine
    auch tatsächlich verwendet wird.  Deswegen dürfte dieser
    Fehler noch sehr häufig im Code schlummern.  Einfach
    aus my_vec(foo) ein my_vec[foo] machen.
4) FieldMatrix habe ich noch nicht angefasst.  Es wird
    damit ein Problem geben, weil Mat eine Methode det() hat
    und FieldMatrix nicht.  Peter:  Wie würdest Du diese
    Sache angehen wollen?
5) In FieldVector gibt es gleichzeitig
      operator=(const K& p)
    und
      operator K ()
    Das ist hochgefährlich, denn man kann damit
      FieldVector<Foo, 3> a, b, c;
      a = b - c;
    schreiben, und der Compiler schluckt es.  Beim Ausführen
    wird dann aber NUR DIE ERSTE KOMPONENTE subtrahiert!!!
    Mysteriöse Fehler sind vorprogrammiert.  Ich habe
    deswegen noch operator- und operator+ dazugebaut.

Und jetzt geht's los.  Bitte alle anschnallen und die
Rückenlehnen senkrecht stellen.

Grüße,
Oliver


More information about the Dune mailing list