[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