diff --git a/grid/albertagrid.hh b/grid/albertagrid.hh index 4628f6bd51c613c920b4b4a644aef51fc584893c..1934ba1e997a523db9d72af44bc16c50f6f9d24b 100644 --- a/grid/albertagrid.hh +++ b/grid/albertagrid.hh @@ -109,6 +109,13 @@ namespace Dune return this->realGeometry.builtGeom(elInfo,face,edge,vertex); } + // just a wrapper call + template <class GeometryType> + bool builtLocalGeom(const GeometryType & geo, ALBERTA EL_INFO *elInfo, int face ) + { + return this->realGeometry.builtLocalGeom(geo,elInfo,face); + } + // just a wrapper call void initGeom() { @@ -191,9 +198,9 @@ namespace Dune //! can only be called for dim=dimworld! //! Note that if both methods are called on the same element, then - //! call jacobianInverse first because integration element is calculated - //! during calculation of the jacobianInverse - const FieldMatrix<albertCtype,mydim,mydim>& jacobianInverse (const FieldVector<albertCtype, cdim>& global) const; + //! call jacobianInverseTransposed first because integration element is calculated + //! during calculation of the transposed of the jacobianInverse + const FieldMatrix<albertCtype,mydim,mydim>& jacobianInverseTransposed (const FieldVector<albertCtype, cdim>& global) const; //*********************************************************************** //! Methods that not belong to the Interface, but have to be public @@ -201,6 +208,9 @@ namespace Dune //! generate the geometry for the ALBERTA EL_INFO //! no interface method bool builtGeom(ALBERTA EL_INFO *elInfo, int face, int edge, int vertex); + + template <class GeometryType> + bool builtLocalGeom(const GeometryType & geo , ALBERTA EL_INFO *elInfo, int face); // init geometry with zeros //! no interface method void initGeom(); @@ -208,14 +218,14 @@ namespace Dune //! print internal data //! no interface method - void print (std::ostream& ss, int indent) const; + void print (std::ostream& ss) const; private: // calculate Matrix for Mapping from reference element to actual element void calcElMatrix () const; - //! built the jacobian inverse and store the volume - void buildJacobianInverse () const; + //! build the transposed of the jacobian inverse and store the volume + void buildJacobianInverseTransposed () const; // template method for map the vertices of EL_INFO to the actual // coords with face_,edge_ and vertex_ , needes for operator [] @@ -379,7 +389,7 @@ namespace Dune EntityPointer ownersFather () const; //! my position in local coordinates of the owners father - FieldVector<albertCtype, dim>& positionInOwnersFather () const; + const FieldVector<albertCtype, dim>& positionInOwnersFather () const; //*********************************************** // End of Interface methods @@ -690,14 +700,11 @@ namespace Dune //! make empty entity pointer (to be revised) AlbertaGridEntityPointer(const AlbertaGridEntityPointerType & org); + //! make empty entity pointer (to be revised) + AlbertaGridEntityPointer(const GridImp & , const EntityImp & en); + //! assignment operator - AlbertaGridEntityPointer& operator= (const AlbertaGridEntityPointer& org) - { - if (grid_!=org.grid_) - DUNE_THROW(GridError,"entity pointer assignment with different grids"); - (*entity_).setEntity( *(org.entity_) ); - done_ = org.done_; - } + AlbertaGridEntityPointer& operator= (const AlbertaGridEntityPointer& org); //! Destructor ~AlbertaGridEntityPointer(); @@ -760,6 +767,9 @@ namespace Dune //! the default Constructor AlbertaGridHierarchicIterator(const AlbertaGridHierarchicIterator<GridImp> &org); + //! the default Constructor + AlbertaGridHierarchicIterator<GridImp> & operator = (const AlbertaGridHierarchicIterator<GridImp> &org); + //! increment void increment(); @@ -866,15 +876,15 @@ namespace Dune //! iteration started. //! Here returned element is in LOCAL coordinates of the element //! where iteration started. - LocalGeometry& intersectionSelfLocal () const; + const LocalGeometry& intersectionSelfLocal () const; /*! intersection of codimension 1 of this neighbor with element where iteration started. Here returned element is in LOCAL coordinates of neighbor */ - LocalGeometry& intersectionNeighborLocal () const; + const LocalGeometry& intersectionNeighborLocal () const; /*! intersection of codimension 1 of this neighbor with element where iteration started. Here returned element is in GLOBAL coordinates of the element where iteration started. */ - Geometry& intersectionGlobal () const; + const Geometry& intersectionGlobal () const; //! local number of codim 1 entity in self where intersection is contained in int numberInSelf () const; @@ -941,10 +951,14 @@ namespace Dune //mutable typename GridImp::IntersectionSelfProvider::ObjectEntity *manageInterEl_; //mutable typename GridImp::IntersectionNeighProvider::ObjectEntity *manageNeighEl_; - //! pointer to element holding the self_local and self_global information. + //! pointer to element holding the intersectionNeighbourLocal information. //! This element is created on demand. mutable LocalGeometryImp *fakeNeigh_; + //! pointer to element holding the intersectionSelfLocal information. + //! This element is created on demand. + mutable LocalGeometryImp *fakeSelf_; + //! pointer to element holding the neighbor_global and neighbor_local //! information. This element is created on demand. mutable LocalGeometryImp *neighGlob_; @@ -990,6 +1004,9 @@ namespace Dune //! Constructor making end iterator AlbertaGridTreeIterator(const AlbertaGridTreeIterator<cd,pitype,GridImp> & org ); + //! Constructor making end iterator + AlbertaGridTreeIterator<cd,pitype,GridImp> & operator = (const AlbertaGridTreeIterator<cd,pitype,GridImp> & org ); + //! Constructor making end iterator AlbertaGridTreeIterator(const GridImp & grid, int travLevel, int proc, bool leafIt=false ); @@ -1311,8 +1328,8 @@ namespace Dune ~AlbertaGrid(); //! Return maximum level defined in this grid. Levels are numbered - //! 0 ... maxlevel with 0 the coarsest level. - int maxlevel() const; + //! 0 ... maxLevel with 0 the coarsest level. + int maxLevel() const; //! Iterator to first entity of given codim on level template<int cd, PartitionIteratorType pitype>