[Dune-devel] [Dune-Commit] dune-geometry r508 - branches/mn-devel/dune/geometry

Martin Nolte nolte at mathematik.uni-freiburg.de
Wed Apr 17 15:45:56 CEST 2013


Hi Oli,

that was the intention all along and has been done a few minutes ago.

Best,

Martin

On 04/17/2013 03:32 PM, Oliver Sander wrote:
> Hi Martin,
> do you see any reason not to merge this (and the corresponding part
> in geometrygrid) to the trunk?
> Best,
> Oliver
>
> Am 17.04.2013 14:50, schrieb mnolte at dune-project.org:
>> Author: mnolte
>> Date: 2013-04-17 14:50:16 +0200 (Wed, 17 Apr 2013)
>> New Revision: 508
>>
>> Modified:
>>     branches/mn-devel/dune/geometry/multilineargeometry.hh
>> Log:
>> remove user data
>>
>>
>> Modified: branches/mn-devel/dune/geometry/multilineargeometry.hh
>> ===================================================================
>> --- branches/mn-devel/dune/geometry/multilineargeometry.hh    2013-04-17
>> 12:34:02 UTC (rev 507)
>> +++ branches/mn-devel/dune/geometry/multilineargeometry.hh    2013-04-17
>> 12:50:16 UTC (rev 508)
>> @@ -114,12 +114,6 @@
>>         static const bool v = false;
>>         static const unsigned int topologyId = ~0u;
>>       };
>> -
>> -    /** \brief type of user data
>> -
>> -        This is used by GeometryGrid to implement reference-counted
>> geometries.
>> -     */
>> -    struct UserData {};
>>     };
>>
>>
>> @@ -168,8 +162,6 @@
>>
>>           For example, GeometryGrid uses this to implement reference counting.
>>        */
>> -    typedef typename Traits::UserData UserData;
>> -
>>       //! type of local coordinates
>>       typedef FieldVector<  ctype, mydimension>  LocalCoordinate;
>>       //! type of global coordinates
>> @@ -199,60 +191,45 @@
>>       typedef Dune::ReferenceElements<  ctype, mydimension>  ReferenceElements;
>>
>>     private:
>> -    struct Storage
>> -    : public UserData
>> -    {
>> -      template<  class CornerStorage>
>> -      Storage ( const ReferenceElement&refEl, const
>> CornerStorage&cornerStorage,
>> -                const UserData&userData )
>> -      : UserData( userData ),
>> -        refElement(&refEl ),
>> -        corners( cornerStorage )
>> -      {}
>> -
>> -      const ReferenceElement *refElement;
>> -      typename Traits::template CornerStorage<  mydimension,
>> coorddimension>::Type corners;
>> -    };
>> -
>>       typedef typename Traits::template CornerStorage<  mydimension,
>> coorddimension>::Type::const_iterator CornerIterator;
>>
>>     public:
>>       /** \brief constructor
>>        *
>> -     *  \param[in]  refElement     reference element for the geometry
>> -     *  \param[in]  cornerStorage  corner storage to store internally
>> -     *  \param[in]  userData       user data to store (optional, if default
>> constructable)
>> +     *  \param[in]  refElement  reference element for the geometry
>> +     *  \param[in]  corners     corners to store internally
>>        *
>> -     *  \note The type of cornerStorage is actually a template argument.
>> +     *  \note The type of corners is actually a template argument.
>>        *        It is only required that the internal corner storage can be
>>        *        constructed from this object.
>>        */
>> -    template<  class CornerStorage>
>> -    MultiLinearGeometry ( const ReferenceElement&refElement, const
>> CornerStorage&cornerStorage,
>> -                          const UserData&userData = UserData() )
>> -    : storage_( refElement, cornerStorage, userData )
>> +    template<  class Corners>
>> +    MultiLinearGeometry ( const ReferenceElement&refElement,
>> +                          const Corners&corners )
>> +    : refElement_(&refElement ),
>> +      corners_( corners )
>>       {}
>>
>>       /** \brief constructor
>>        *
>> -     *  \param[in]  gt             geometry type
>> -     *  \param[in]  cornerStorage  corner storage to store internally
>> -     *  \param[in]  userData       user data to store (optional, if default
>> constructable)
>> +     *  \param[in]  gt          geometry type
>> +     *  \param[in]  corners     corners to store internally
>>        *
>> -     *  \note The type of cornerStorage is actually a template argument.
>> +     *  \note The type of corners is actually a template argument.
>>        *        It is only required that the internal corner storage can be
>>        *        constructed from this object.
>>        */
>> -    template<  class CornerStorage>
>> -    MultiLinearGeometry ( Dune::GeometryType gt, const
>> CornerStorage&cornerStorage,
>> -                          const UserData&userData = UserData() )
>> -    : storage_( ReferenceElements::general( gt ), cornerStorage, userData )
>> +    template<  class Corners>
>> +    MultiLinearGeometry ( Dune::GeometryType gt,
>> +                          const Corners&corners )
>> +    : refElement_(&ReferenceElements::general( gt ) ),
>> +      corners_( corners )
>>       {}
>>
>>       /** \brief is this mapping affine? */
>>       bool affine () const
>>       {
>> -      CornerIterator cit = storage().corners.begin();
>> +      CornerIterator cit = corners_.begin();
>>         return affine( topologyId(), integral_constant<  int,
>> mydimension>(), cit, jacobianTransposed_ );
>>       }
>>
>> @@ -266,7 +243,7 @@
>>       GlobalCoordinate corner ( int i ) const
>>       {
>>         assert( (i>= 0)&&  (i<  corners()) );
>> -      return storage().corners[ i ];
>> +      return corners_[ i ];
>>       }
>>
>>       /** \brief obtain the centroid of the mapping's image */
>> @@ -280,7 +257,7 @@
>>        */
>>       GlobalCoordinate global ( const LocalCoordinate&local ) const
>>       {
>> -      CornerIterator cit = storage().corners.begin();
>> +      CornerIterator cit = corners_.begin();
>>         GlobalCoordinate y;
>>         global<  false>( topologyId(), integral_constant<  int,
>> mydimension>(), cit, ctype( 1 ), local, ctype( 1 ), y );
>>         return y;
>> @@ -356,7 +333,7 @@
>>        */
>>       const JacobianTransposed&jacobianTransposed ( const
>> LocalCoordinate&local ) const
>>       {
>> -      CornerIterator cit = storage().corners.begin();
>> +      CornerIterator cit = corners_.begin();
>>         jacobianTransposed<  false>( topologyId(), integral_constant<  int,
>> mydimension>(), cit, ctype( 1 ), local, ctype( 1 ), jacobianTransposed_ );
>>         return jacobianTransposed_;
>>       }
>> @@ -369,17 +346,9 @@
>>        */
>>       const JacobianInverseTransposed&jacobianInverseTransposed ( const
>> LocalCoordinate&local ) const;
>>
>> -    /** \brief read-only access to the internal user data */
>> -    const UserData&userData () const { return storage_; }
>> -    /** \brief read-write access to the internal user data */
>> -    UserData&userData () { return storage_; }
>> -
>>     protected:
>> -    const Storage&storage () const { return storage_; }
>> -    Storage&storage () { return storage_; }
>> +    const ReferenceElement&refElement () const { return *refElement_; }
>>
>> -    const ReferenceElement&refElement () const { return
>> *storage().refElement; }
>> -
>>       TopologyId topologyId () const
>>       {
>>         return topologyId( integral_constant<  bool,
>> hasSingleGeometryType>() );
>> @@ -415,7 +384,8 @@
>>       mutable JacobianInverseTransposed jacobianInverseTransposed_;
>>
>>     private:
>> -    Storage storage_;
>> +    const ReferenceElement *refElement_;
>> +    typename Traits::template CornerStorage<  mydimension,
>> coorddimension>::Type corners_;
>>     };
>>
>>
>> @@ -476,7 +446,6 @@
>>
>>     public:
>>       typedef typename Base::ReferenceElement ReferenceElement;
>> -    typedef typename Base::UserData UserData;
>>
>>       typedef typename Base::ctype ctype;
>>
>> @@ -490,18 +459,16 @@
>>       typedef typename Base::JacobianInverseTransposed
>> JacobianInverseTransposed;
>>
>>       template<  class CornerStorage>
>> -    CachedMultiLinearGeometry ( const ReferenceElement&refElement, const
>> CornerStorage&cornerStorage,
>> -                                const UserData&userData = UserData() )
>> -    : Base( refElement, cornerStorage, userData ),
>> +    CachedMultiLinearGeometry ( const ReferenceElement&refElement, const
>> CornerStorage&cornerStorage )
>> +    : Base( refElement, cornerStorage ),
>>         affine_( Base::affine() ),
>>         jacobianInverseTransposedComputed_( false ),
>>         integrationElementComputed_( false )
>>       {}
>>
>>       template<  class CornerStorage>
>> -    CachedMultiLinearGeometry ( Dune::GeometryType gt, const
>> CornerStorage&cornerStorage,
>> -                                const UserData&userData = UserData() )
>> -    : Base( gt, cornerStorage, userData ),
>> +    CachedMultiLinearGeometry ( Dune::GeometryType gt, const
>> CornerStorage&cornerStorage )
>> +    : Base( gt, cornerStorage ),
>>         affine_( Base::affine() ),
>>         jacobianInverseTransposedComputed_( false ),
>>         integrationElementComputed_( false )
>>
>>
>> _______________________________________________
>> Dune-Commit mailing list
>> Dune-Commit at dune-project.org
>> http://lists.dune-project.org/mailman/listinfo/dune-commit
>
>
> _______________________________________________
> Dune-devel mailing list
> Dune-devel at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune-devel

-- 
Dr. Martin Nolte <nolte at mathematik.uni-freiburg.de>

Universität Freiburg                                   phone: +49-761-203-5630
Abteilung für angewandte Mathematik                    fax:   +49-761-203-5632
Hermann-Herder-Straße 10
79104 Freiburg, Germany




More information about the Dune-devel mailing list