[Dune] [Dune-Commit] dune-grid r6138 - in trunk/dune/grid: . common
Martin Nolte
nolte at mathematik.uni-freiburg.de
Fri Jan 15 13:54:07 CET 2010
Hi Christian,
I have some question on this:
- does the default implementation of Geometry< 0, ... > really use the
deprecated operator[] on the Geometry?
- do the grid implementations really use the default implementations? I
thought we decided this was not necessary.
Martin
christi at dune-project.org wrote:
> Author: christi
> Date: 2010-01-15 12:50:34 +0100 (Fri, 15 Jan 2010)
> New Revision: 6138
>
> Modified:
> trunk/dune/grid/common/geometry.hh
> trunk/dune/grid/common/intersection.hh
> trunk/dune/grid/sgrid.hh
> trunk/dune/grid/yaspgrid.hh
> Log:
> * apply first implementaation of center and centerUnitOuterNormal
> * credits go to Atgeirr
> * sgrid and yaspgrid implement their own centerUnitOuterNormal
> all other grids should we working through the Default-Implementation
>
>
> Modified: trunk/dune/grid/common/geometry.hh
> ===================================================================
> --- trunk/dune/grid/common/geometry.hh 2010-01-14 18:17:20 UTC (rev 6137)
> +++ trunk/dune/grid/common/geometry.hh 2010-01-15 11:50:34 UTC (rev 6138)
> @@ -216,6 +216,20 @@
> return realGeometry.volume();
> }
>
> + /** \brief return center of geometry
> + * Note that this method is still subject to a change of name and semantics.
> + * At the moment, the center is not required to be the centroid of the
> + * geometry, or even the centroid of its corners. This makes the current
> + * default implementation acceptable, which maps the centroid of the
> + * reference element to the geometry.
> + * We may change the name (and semantic) of the method to centroid() if we
> + * find reasonably efficient ways to implement it properly.
> + */
> + GlobalCoordinate center () const
> + {
> + return realGeometry.center();
> + }
> +
> /** \brief Return the transposed of the Jacobian
> *
> * The Jacobian is defined in the documentation of
> @@ -315,6 +329,20 @@
> return refElement.volume() * asImp().integrationElement(localBaryCenter);
> }
>
> + //! return center of the geometry
> + FieldVector<ctype, cdim> center () const
> + {
> + GeometryType type = asImp().type();
> +
> + // get corresponding reference element
> + const GenericReferenceElement< ctype , mydim > & refElement =
> + GenericReferenceElements< ctype, mydim >::general(type);
> +
> + // center is (for now) the centroid of the reference element mapped to
> + // this geometry.
> + return asImp().global(refElement.position(0,0));
> + }
> +
> private:
> //! Barton-Nackman trick
> GeometryImp<mydim,cdim,GridImp>& asImp () {return static_cast<GeometryImp<mydim,cdim,GridImp>&>(*this);}
> @@ -349,7 +377,16 @@
> }
>
> //! return volume of the geometry
> - ctype volume () const { return 1.0; }
> + ctype volume () const
> + {
> + return 1.0;
> + }
> +
> + //! return center of the geometry
> + FieldVector<ctype, cdim> center () const
> + {
> + return asImp()[0];
> + }
>
> private:
> //! Barton-Nackman trick
>
> Modified: trunk/dune/grid/common/intersection.hh
> ===================================================================
> --- trunk/dune/grid/common/intersection.hh 2010-01-14 18:17:20 UTC (rev 6137)
> +++ trunk/dune/grid/common/intersection.hh 2010-01-15 11:50:34 UTC (rev 6138)
> @@ -436,6 +436,17 @@
> return this->real.unitOuterNormal(local);
> }
>
> + /*! @brief Return unit outer normal (length == 1)
> +
> + The returned vector is the normal at the center() of the
> + intersection's geometry.
> + It is scaled to have unit length.
> + */
> + GlobalCoordinate centerUnitOuterNormal () const
> + {
> + return this->real.centerUnitOuterNormal();
> + }
> +
> //===========================================================
> /** @name Implementor interface
> */
> @@ -483,15 +494,17 @@
> enum { dimworld=GridImp::dimensionworld };
> typedef typename GridImp::ctype ct;
> public:
> +
> //! return unit outer normal, this should be dependent on
> //! local coordinates for higher order boundary
> //! the normal is scaled with the integration element of the intersection.
> FieldVector<ct, dimworld> integrationOuterNormal (const FieldVector<ct, dim-1>& local) const
> {
> - FieldVector<ct, dimworld> n = unitOuterNormal(local);
> + FieldVector<ct, dimworld> n = asImp().unitOuterNormal(local);
> n *= asImp().intersectionGlobal().integrationElement(local);
> return n;
> }
> +
> //! return unit outer normal
> FieldVector<ct, dimworld> unitOuterNormal (const FieldVector<ct, dim-1>& local) const
> {
> @@ -499,6 +512,19 @@
> n /= n.two_norm();
> return n;
> }
> +
> + //! return unit outer normal at center of intersection geometry
> + FieldVector<ct, dimworld> centerUnitOuterNormal () const
> + {
> + // For now, we do this...
> + GeometryType type = asImp().geometry().type();
> + const GenericReferenceElement<ct, dim-1> & refElement =
> + GenericReferenceElements<ct, dim-1>::general(type);
> + return asImp().unitOuterNormal(refElement.position(0,0));
> + // But later, if we change the meaning of center(),
> + // we may have to change to this...
> + // return asImp().unitOuterNormal(asImp().local(asImp().center()));
> + }
>
> private:
> //! Barton-Nackman trick
>
> Modified: trunk/dune/grid/sgrid.hh
> ===================================================================
> --- trunk/dune/grid/sgrid.hh 2010-01-14 18:17:20 UTC (rev 6137)
> +++ trunk/dune/grid/sgrid.hh 2010-01-15 11:50:34 UTC (rev 6138)
> @@ -734,6 +734,11 @@
> //! return unit outer normal
> FieldVector<ctype, GridImp::dimensionworld> unitOuterNormal (const FieldVector<ctype, GridImp::dimension-1>& local) const
> {
> + return centerUnitOuterNormal();
> + }
> + //! return unit outer normal at center of intersection geometry
> + FieldVector<ctype, GridImp::dimensionworld> centerUnitOuterNormal () const
> + {
> // while we are at it, compute normal direction
> FieldVector<ctype, dimworld> normal(0.0);
> if (count%2)
>
> Modified: trunk/dune/grid/yaspgrid.hh
> ===================================================================
> --- trunk/dune/grid/yaspgrid.hh 2010-01-14 18:17:20 UTC (rev 6137)
> +++ trunk/dune/grid/yaspgrid.hh 2010-01-15 11:50:34 UTC (rev 6138)
> @@ -1691,6 +1691,12 @@
> return _normal;
> }
>
> + //! return unit outer normal at center of intersection geometry
> + FieldVector<ctype, dimworld> centerUnitOuterNormal () const
> + {
> + return _normal;
> + }
> +
> //! return unit outer normal, this should be dependent on
> //! local coordinates for higher order boundary
> //! the normal is scaled with the integration element of the intersection.
>
>
> _______________________________________________
> Dune-Commit mailing list
> Dune-Commit at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune-commit
--
Martin Nolte <nolte at mathematik.uni-freiburg.de>
Universität Freiburg phone: +49-761-203-5642
Abteilung für angewandte Mathematik fax: +49-761-203-5632
Hermann-Herder-Straße 10
79104 Freiburg, Germany
More information about the Dune
mailing list