[Fwd: [Dune] Abbildung von Referenzflaeche in Referenzelement]

Adrian Burri burriad at mathematik.uni-freiburg.de
Tue Dec 6 11:56:43 CET 2005


Nachtrag zu gestern: mein Vorschlag sieht jetzt so aus: da Vererbung mit 
template-Methoden nicht klappt, aber die Implementierung generisch
ist, habe ich eine globale Methode geschrieben, die von allen 
Implementierungen zugegriffen wird. Global? Fast: die Methode ist 
innerhalb eines anonymen Namespace, wird also nicht exportiert. Das 
sieht dann wie folgt aus:

namespace Dune
{
  namespace {
    template <class RT, int codim>
    FieldVector<typename RT::CoordType, RT::d>
    mapGlobal(const RT& refElem,
              const FieldVector<typename RT::CoordType, RT::d-codim>& l,
              int i, int cdim)
    {
      typedef typename RT::CoordType CoordType;
      const int dim = RT::d;
     
      assert(cdim == codim);
      static FieldMatrix<CoordType, dim-codim, dim> mat;
     
      int zeroLocalIdx = refElem.subEntity(i, cdim, 0, dim);
      FieldVector<CoordType, dim> result =
        refElem.position(zeroLocalIdx, dim);
      for (int j = 0; j < dim-cdim; ++j) {
        int indexLocal = refElem.subEntity(i, cdim, j+1, dim);
        mat[j] = refElem.position(indexLocal, dim) - result;
      }

      mat.umtv(l, result);

      return result;
    }
   
  } // end unnamed namespace

  ...

     // In class ReferenceCube
     //! maps local coordinate on subentity i of codim cdim onto 
reference element coordinates
    template <int codim>
    FieldVector<ctype, dim> global(const FieldVector<ctype, dim-codim>& 
local, int i, int cdim) const
    {
      return mapGlobal<ReferenceCube<ctype, dim>, codim>(*this, local, 
i, cdim);
    }

  ...

} // end namespace Dune

Falls keine Einwaende kommen, check ich das mal ein.

Gruss Adi

Adrian Burri wrote:

> Hallo Leute,
>
> die unten gestellte Frage laesst sich wie folgt beantworten:
>
>  //! maps local point on subentity i of codim cdim onto reference 
> element coordinates
>    template <int codim>
>    FieldVector<ctype, dim> global(const FieldVector<ctype, dim-codim>& 
> local, int i, int cdim) const
>    {
>      assert(cdim == codim);
>      const int dim = d;
>      static FieldMatrix<CoordType, dim-codim, dim> mat;
>          int zeroLocalIdx = refElem_.subEntity(i, cdim, 0, dim);
>      FieldVector<ctype, dim> result = refElem_.position(zeroLocalIdx, 
> dim);
>      for (int j = 0; j < dim-cdim; ++j) {
>        int indexLocal = refElem_.subEntity(i, cdim, j+1, dim);
>        mat[j] = refElem_.position(indexLocal, dim) - result;
>      }
>
>      mat.umtv(local, result);
>
>      return result;
>    }
>
> waere das nicht etwas, was in die ReferenceElement-Klassen eingebaut 
> werden sollte? Probleme bereitet dabei noch der zus. template 
> Parameter, da die Methode dann nicht virtuell sein kann...
>
> Gruss Adi
>
> -------- Original Message --------
> Subject:     [Dune] Abbildung von Referenzflaeche in Referenzelement
> Date:     Fri, 02 Dec 2005 10:54:49 +0100
> From:     Adrian Burri <burriad at mathematik.uni-freiburg.de>
> To:     Dune-Mailingliste <dune at hal.iwr.uni-heidelberg.de>
>
>
>
> Hallo Leute,
>
> ich versuche gerade an die folgende Info ranzukommen: Geg. ein Punkt 
> x_f auf einer Flaeche f des Referenzelements r (x_f ist in den lokalen 
> Koordinaten der Referenzflaeche von f). Ges. der zugeh. Punkt x_r auf 
> r (in den Koordinaten des Referenzelements).
>
> IntersectionIterator::intersection{Self,Neighbor}Local.global() macht 
> sowas aehnliches, allerdings braucht man dazu die Geometries des 
> entsprechenden Gitters, und im oben geschilderten Problem moechte man 
> ja moeglichst unabh. vom Gitter sein.
>
> Hat jemand das Problem schon mal geloest oder hat Anregungen, wie 
> man's anpacken kann?
>
> Gruss Adi
>
> _______________________________________________
> Dune mailing list
> Dune at hal.iwr.uni-heidelberg.de
> http://hal.iwr.uni-heidelberg.de/cgi-bin/mailman/listinfo/dune
>
>
> _______________________________________________
> Dune mailing list
> Dune at hal.iwr.uni-heidelberg.de
> http://hal.iwr.uni-heidelberg.de/cgi-bin/mailman/listinfo/dune





More information about the Dune mailing list