- Aug 20, 2004
-
-
Robert Klöfkorn authored
[[Imported from SVN: r694]]
-
Robert Klöfkorn authored
[[Imported from SVN: r693]]
-
Robert Klöfkorn authored
choosen now. [[Imported from SVN: r692]]
-
- Aug 19, 2004
-
-
Oliver Sander authored
[[Imported from SVN: r691]]
-
- Aug 18, 2004
-
-
Robert Klöfkorn authored
[[Imported from SVN: r690]]
-
Robert Klöfkorn authored
[[Imported from SVN: r689]]
-
Robert Klöfkorn authored
DUNE_PKG_CPPFLAGS. [[Imported from SVN: r688]]
-
- Aug 17, 2004
-
-
Robert Klöfkorn authored
DefaultIntersectionIterator. [[Imported from SVN: r687]]
-
Robert Klöfkorn authored
object. [[Imported from SVN: r686]]
-
Robert Klöfkorn authored
[[Imported from SVN: r685]]
-
Robert Klöfkorn authored
used with grape. [[Imported from SVN: r684]]
-
Oliver Sander authored
[[Imported from SVN: r683]]
-
Mario Ohlberger authored
[[Imported from SVN: r682]]
-
Oliver Sander authored
gegebenen Zeile über alle Nichtnulleinträge dieser Zeile iteriert. Im Gegenzug für die Funktion val() auskommentiert, denn sie sollte jetzt nicht mehr nötig sein.y [[Imported from SVN: r681]]
-
- Aug 16, 2004
-
-
Robert Klöfkorn authored
[[Imported from SVN: r680]]
-
Robert Klöfkorn authored
[[Imported from SVN: r679]]
-
Robert Klöfkorn authored
[[Imported from SVN: r678]]
-
Robert Klöfkorn authored
[[Imported from SVN: r677]]
-
Robert Klöfkorn authored
[[Imported from SVN: r676]]
-
Robert Klöfkorn authored
Furthermore reduced number of grid alktroughs. [[Imported from SVN: r675]]
-
- Aug 13, 2004
-
-
Oliver Sander authored
[[Imported from SVN: r674]]
-
Oliver Sander authored
Außerdem erscheinen die darin enthaltenen Klassen jetzt in Doxygen. [[Imported from SVN: r673]]
-
- Aug 12, 2004
-
-
Robert Klöfkorn authored
[[Imported from SVN: r672]]
-
Robert Klöfkorn authored
[[Imported from SVN: r671]]
-
Oliver Sander authored
Ob noch alles geht ist bis dato ungetestet, aber immerhin kann man wieder übersetzen. [[Imported from SVN: r670]]
-
- Aug 11, 2004
-
-
Oliver Sander authored
[[Imported from SVN: r669]]
-
Robert Klöfkorn authored
[[Imported from SVN: r668]]
-
Robert Klöfkorn authored
[[Imported from SVN: r667]]
-
Peter Bastian authored
[[Imported from SVN: r666]]
-
Peter Bastian authored
[[Imported from SVN: r665]]
-
Peter Bastian authored
Ansonsten nix verändert, nix parallel [[Imported from SVN: r664]]
-
Peter Bastian authored
Änderungen im Zuge der parallelen Schnittstelle =============================================== PB, 11. August 2004 1) ElementType: Habe den einzelnen identifiern explizit Nummern zugewiesen. Wird in der neuen Klasse ReferenceTopology gebraucht. 2) neuen GridIdentifier für yaspgrid dazugefügt 3) Neuer Aufzählungstyp InterfaceType zur Steuerung der Kommunikation 4) Aufzählungstyp IteratorType heisst jetzt PartitionIteratorType und hat auch neuen Inhalt. HATTE DEN SCHON JEMAND VERWENDET? 5) Neuer Aufzählungstyp CommunicationDirection zur Steuerung der Kommunikation 6) Aufzählungstyp PartitionType habe ich leicht verändert, da ich das Überlappungsmodell leicht angepasst. Das werde ich dann im paper beschreiben... 7) Neue Klasse GridError zum werfen von exceptions. Das halte ich inzwischen für absolut notwendig! Ist sehr ähnlich zu Thimo's Vorschlag, allerdings hatte ich die nicht mehr gefunden. Im wesentlichen kann man eine message, das file und die Zeilennummer im Konstruktor angeben. Die Verwendung sieht dann so aus: Wo der Fehler auftritt: throw GridError("tried to call father on level 0",__FILE__,__LINE__); das catch: try { ... } catch (Dune::GridError& error) { std::cout << error << std::endl; } 8) Ich habe eine Klasse für die Referenzelemente angefangen: template<int dim, class ct> class ReferenceTopology { public: //! default constructor will build up all the internal data ReferenceTopology (); //! return local coordinates of center in reference element Vec<dim,ct>& center_codim0_local (int elemtype); //! return local coordinates of center of ith codim 1 subentity Vec<dim-1,ct>& center_codim1_local (int elemtype, int i); }; Hat bis jetzt nur Methoden um Mittelpunkt des Referenzelementes und Mittelpunkte der Seiten des Referenzelementes abzufragen. Prismen und Pyramiden sind zudem nicht implementiert. Damit kann man jetzt aber wenigstens schon mal das FV Verfahren elementunabhängig hinschreiben. Der Rest muss halt noch gemacht werden .... 9) Nun die wohl weitreichendste Veränderung: Der LevelIterator hat nun VIER statt DREI template Parameter: template<int,int,int,PartitionIteratorType> class LevelIteratorImp; Der vierte Parameter ist ein Aufzählungstyp der angibt über was iteriert wird. Das muss so sein, damit man spezialisierte Versionen implementieren kann. Alternative wäre gewesen einen neuen Datentyp einzuführen, das ist aber unbefriedigend, da der neue Iterator wirklich ein parametrisierter LevelIterator ist! Was hat das für Auswirkungen? Es gibt ein paar Stellen, wie etwa /*! Provide access to mesh entity i of given codimension. Entities are numbered 0 ... count<cc>()-1 */ template<int cc> LevelIteratorImp<cc,dim,dimworld,All_Partition> entity (int i); // 0 <= i < count() an denen einfach ,All_Partition dazugefügt wird, da mit dem entstehenden Iterator kein ++ gemacht werden soll. An den anderen Stellen muss der neue Template-Parameter selbstverständlich dazugefügt werden, wie etwa im LevelIterator selbst: template<int codim, int dim, int dimworld, PartitionIteratorType pitype, class ct, template<int,int,int,PartitionIteratorType> class LevelIteratorImp, template<int,int,int> class EntityImp > class LevelIterator { ... } 10) In den Anwendungen hat der neue LevelIterator wenig Auswirkungen, solange man hübsch die Traits verwendet hat, denn etwa im Grid gilt: template <int codim> struct Traits { typedef ct CoordType; typedef GridImp<dim,dimworld> ImpGrid; typedef LevelIteratorImp<codim,dim,dimworld,All_Partition> LevelIterator; typedef LevelIteratorImp<codim,dim,dimworld,Interior_Partition> InteriorLevelIterator; typedef LevelIteratorImp<codim,dim,dimworld,InteriorBorder_Partition> InteriorBorderLevelIterator; typedef LevelIteratorImp<codim,dim,dimworld,Overlap_Partition> }; Der LevelIterator mit parameter "All_Partition" wird als LevelIterator definiert. Damit läuft man dann eben über alle entities. Das könnten wir auch anders machen, dann sind eventuell weniger Änderungen bei der Parallelisierung existierenden codes notwendig. 11) Im Grid gibt es folgende neue/geänderte Methoden: 11.1) //! return size (= distance in graph) of overlap region int overlap_size (int level, int codim); //! return size (= distance in graph) of ghost region int ghost_size (int level, int codim); Sind wie damals in Freiburg besprochen. Wer's nicht mehr weiss wartet auf das paper :-) 11.2) //! Iterator to first entity of given codim on level template<int codim, PartitionIteratorType pitype> LevelIteratorImp<codim,dim,dimworld,pitype> lbegin (int level); //! one past the end on this level template<int codim, PartitionIteratorType pitype> LevelIteratorImp<codim,dim,dimworld,pitype> lend (int level); lbegin und lend haben entsprechend dem LevelIterator einen weiteren template parameter PartitionIteratorType bekommen. HAT ERST MAL AUSWIRKUNGEN AUF ALLE ANWENDUNGEN !! Mann ist gezwungen überall nachzudenken wie eine Schleife über das Gitter parallelisiert wird. Soll der Code nur sequentiell laufen so übergibt man einfach "All_Partition" als Parameter. FÜR CODES DIE WEITER NUR ERST MAL SEQUENTIELL LAUFEN SOLLEN gibt es eine version mit nur einem template parameter: //! version without second template parameter to run sequential code template<int codim> LevelIteratorImp<codim,dim,dimworld,All_Partition> lbegin (int level); //! version without second template parameter to run sequential code template<int codim> LevelIteratorImp<codim,dim,dimworld,All_Partition> lend (int level); Wer also Traits verwendet hat sollte ohne irgendwelche Änderungen in den sequentiellen Anwendungen auskommen können. 11.3) //! the generic communication function template<class T, template<class> class P, int codim> void communicate (T& t, InterfaceType iftype, CommunicationDirection dir, int level); Diese Funktion ist alles was man für die Kommunikation braucht. Die ist wirklich klasse und wird aber erst im paper erklärt :-) Hier soll es später auch mal effizientere Varianten für die Leaf-Kommunikation geben. Im Moment muss man noch auf allen leveln separat ein communicate aufrufen... 12) Auf der Entity (jeder codim) gibt es folgende neue Funktion: //! return partition type attribute PartitionType partition_type (); um abzufragen in welchem Bereich die entity sitzt. Wird dann mit dem Überlappungsmodell erklärt. [[Imported from SVN: r663]]
-
Peter Bastian authored
[[Imported from SVN: r662]]
-
Peter Bastian authored
[[Imported from SVN: r661]]
-
Peter Bastian authored
[[Imported from SVN: r660]]
-
Peter Bastian authored
[[Imported from SVN: r659]]
-
Oliver Sander authored
[[Imported from SVN: r658]]
-
Robert Klöfkorn authored
orientation of face. Now seems to work, :). [[Imported from SVN: r657]]
-
Peter Bastian authored
[[Imported from SVN: r656]]
-
Peter Bastian authored
[[Imported from SVN: r655]]
-