[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