[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