[Dune] Vec --> FieldVector
Peter Bastian
Peter.Bastian at iwr.uni-heidelberg.de
Mon Oct 18 11:35:31 CEST 2004
Oliver Sander schrieb:
>> 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.
Das hatte ich auch schon programmiert :-)
> 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.
Vektoren der Länge 0? Welches Gitter macht das ?
> 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.
OK
> 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?
Wegen mir kann FieldMatrix eine Methode det() bekommen. Es gibt sowieso
eine Hierarchie von Schnittstellen, da auch nicht jede Matrix eine
Methode invert() haben wird.
> 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.
Die Operatoren operator+ etc wollte ich eigentlich nicht haben. Ich
würde eher den operator K weglassen. Das war nur ein Testballon um zu
erreichen, dass man im skalaren Fall nicht immer x[0] schreiben muss.
Das habe ich jetzt aber anders gelöst.
>
> Und jetzt geht's los. Bitte alle anschnallen und die
> Rückenlehnen senkrecht stellen.
10, 9, 8, ...
-- Peter
More information about the Dune
mailing list