Skip to content
Snippets Groups Projects
  1. Aug 17, 2004
  2. Aug 16, 2004
  3. Aug 13, 2004
  4. Aug 12, 2004
  5. Aug 11, 2004
    • Oliver Sander's avatar
      Die Methoden von LaplaceFEOp erscheinen unter doxygen · 45e0e4c2
      Oliver Sander authored
      [[Imported from SVN: r669]]
      45e0e4c2
    • Robert Klöfkorn's avatar
      Forgot something for hasLevelIndex_. · 2997bec0
      Robert Klöfkorn authored
      [[Imported from SVN: r668]]
      2997bec0
    • Robert Klöfkorn's avatar
      LevelIndex is now optional, can be switch off, if the user wants to. · 4d3cc5f0
      Robert Klöfkorn authored
      [[Imported from SVN: r667]]
      4d3cc5f0
    • Peter Bastian's avatar
      The parallel version · 0c58bd1f
      Peter Bastian authored
      [[Imported from SVN: r666]]
      0c58bd1f
    • Peter Bastian's avatar
      Parallele Version erst mal komplett · 9e8c0272
      Peter Bastian authored
      [[Imported from SVN: r665]]
      9e8c0272
    • Peter Bastian's avatar
      added SimpleBoundaryEntity. · 40f2e17d
      Peter Bastian authored
      Ansonsten nix verändert, nix parallel
      
      [[Imported from SVN: r664]]
      40f2e17d
    • Peter Bastian's avatar
      Änderungen für die parallele Gitterschnittstelle. Hier die längliche Beschreibung: · b2305605
      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]]
      b2305605
    • Peter Bastian's avatar
      operator<< für die Vec<dim,T> Klasse · 2ade7530
      Peter Bastian authored
      [[Imported from SVN: r662]]
      2ade7530
    • Peter Bastian's avatar
      insert_after, insert_before mit Referenz als Argument · a7376565
      Peter Bastian authored
      [[Imported from SVN: r661]]
      a7376565
    • Peter Bastian's avatar
      added typedef T value_type because this is conforming to STL · 569ba607
      Peter Bastian authored
      [[Imported from SVN: r660]]
      569ba607
    • Peter Bastian's avatar
      push_front mit Referenz als Argument · 27a22464
      Peter Bastian authored
      [[Imported from SVN: r659]]
      27a22464
    • Oliver Sander's avatar
      Anpassung an neuen Konstruktor von SparseRowMatrix · 51679459
      Oliver Sander authored
      [[Imported from SVN: r658]]
      51679459
    • Robert Klöfkorn's avatar
      bug fix in InteresectionIterator::outer_normal: forgot to muliply with · e17a6ebc
      Robert Klöfkorn authored
      orientation of face. Now seems to work, :).
      
      [[Imported from SVN: r657]]
      e17a6ebc
    • Peter Bastian's avatar
      added functions overlap_size, ghost_size · 08603930
      Peter Bastian authored
      [[Imported from SVN: r656]]
      08603930
    • Peter Bastian's avatar
      erste parallele Version geht · 5ce8a46a
      Peter Bastian authored
      [[Imported from SVN: r655]]
      5ce8a46a
    • Peter Bastian's avatar
      erste parallele Version geht ! · 7843b34a
      Peter Bastian authored
      [[Imported from SVN: r654]]
      7843b34a
  6. Aug 10, 2004
Loading