[Dune] Removal of GenericGeometry::normal()
Martin Nolte
nolte at mathematik.uni-freiburg.de
Wed May 2 11:54:10 CEST 2012
Hi Christoph, hi Oliver,
it was me who deprecated the method. The reason is that semantics of the
method were always rather obscure and it existed solely for performance
reasons. After some improvements to the generic geometries, it is now possible
to directly implement the Piola-Transform without performance penalty and,
hence, the reason for this obscure method is gone.
For the replacement code, just have a look at GeometryGrid's intersections.
The integrationOuterNormal is computed as follows:
-------------------------------------------------------------------------------
const GenericReferenceElement< ctype, dimension > &refElement
= GenericReferenceElements< ctype, dimension>::general( insideGeo_.type() );
FieldVector< ctype, dimension > x( geometryInInside().global( local ) );
const typename ElementGeometryImpl::JacobianInverseTransposed &jit
= insideGeo_.jacobianInverseTransposed( x );
const FieldVector< ctype, dimension > &refNormal
= refElement.volumeOuterNormal( indexInInside() );
FieldVector< ctype, dimensionworld > normal;
jit.mv( refNormal, normal );
normal *= ctype( 1 ) / jit.det();
return normal;
-------------------------------------------------------------------------------
In case you only need an outer normal, you can remove the rescaling.
Notice that the jacobianInverseTransposed natively returned by the generic
geometry is _not_ a FieldMatrix, so that the determinant is not actually
recomputed but known from the inversion process. Moreover, if the matrix is
non-symmetric, det returns the integration element.
I hope this clarifies the issue.
Best,
Martin
PS: I just removed the test, because I think that's the appropriate thing to
do. However, the test does not look like it's written by me.
On 05/02/2012 11:38 AM, Christoph Grüninger wrote:
> Hi Oliver,
> make check fails for dune-grid at the file testbasicgeometry.cc. normal() is
> called but it is no longer provided by GenericGeometry.
>
> We could remove the test or calculate the normal by it's replacement.
>
> Greets
> Christoph
>
>
>> make[5]: Entering directory
>> `/temp/gruenich/dune/complete/dune-grid/dune/grid/genericgeometry/test'
>> g++ -std=c++0x -DHAVE_CONFIG_H -I. -I../../../..
>> -I/temp/gruenich/dune/complete/dune-common
>> -I/temp/gruenich/dune/complete/dune-geometry -I../../../..
>> -I/temp/gruenich/dune/complete/dune-common
>> -I/temp/gruenich/dune/complete/dune-geometry
>> -I/temp/gruenich/dune/complete/dune-common -I/usr/include -DENABLE_GMP=1
>> -I/temp/gruenich/dune/complete/dune-geometry -DGRIDDIM=3 -DWORLDDIM=3
>> -DYASPGRID -I/temp/gruenich/dune/zusatz/alberta-3.0.0-rc7/install/include
>> -I/temp/gruenich/dune/zusatz/alberta-3.0.0-rc7/install/include/alberta
>> -DALBERTA_DIM=3 -DENABLE_ALBERTA
>> -DDUNE_GRID_EXAMPLE_GRIDS_PATH=\"../../../../doc/grids/\" -Wall
>> -Wmissing-include-dirs -Wcast-align -Wno-packed-bitfield-compat
>> -Wno-unused-parameter -fno-strict-aliasing -fstrict-overflow -g -DNDEBUG -MT
>> testbasicgeometry.o -MD -MP -MF .deps/testbasicgeometry.Tpo -c -o
>> testbasicgeometry.o testbasicgeometry.cc
>> testbasicgeometry.cc: In function ‘void testBasicGeometry(const
>> TestGeometry&, typename TestGeometry::ctype, bool, int&) [with TestGeometry
>> = Dune::GenericGeometry::BasicGeometry<0,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 0, 0> >, typename
>> TestGeometry::ctype = double]’:
>> testbasicgeometry.cc:123:73: instantiated from here
>> testbasicgeometry.cc:47:9: error: ‘const class
>> Dune::GenericGeometry::BasicGeometry<0,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 0, 0> >’ has no member
>> named ‘normal’
>> testbasicgeometry.cc: In function ‘void testBasicGeometry(const
>> TestGeometry&, typename TestGeometry::ctype, bool, int&) [with TestGeometry
>> = Dune::GenericGeometry::BasicGeometry<0,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 1, 1> >, typename
>> TestGeometry::ctype = double]’:
>> testbasicgeometry.cc:167:73: instantiated from here
>> testbasicgeometry.cc:47:9: error: ‘const class
>> Dune::GenericGeometry::BasicGeometry<0,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 1, 1> >’ has no member
>> named ‘normal’
>> testbasicgeometry.cc: In function ‘void testBasicGeometry(const
>> TestGeometry&, typename TestGeometry::ctype, bool, int&) [with TestGeometry
>> = Dune::GenericGeometry::BasicGeometry<1,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 1, 1> >, typename
>> TestGeometry::ctype = double]’:
>> testbasicgeometry.cc:200:73: instantiated from here
>> testbasicgeometry.cc:47:9: error: ‘const class
>> Dune::GenericGeometry::BasicGeometry<1,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 1, 1> >’ has no member
>> named ‘normal’
>> testbasicgeometry.cc: In function ‘void testBasicGeometry(const
>> TestGeometry&, typename TestGeometry::ctype, bool, int&) [with TestGeometry
>> = Dune::GenericGeometry::BasicGeometry<0,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 2, 2> >, typename
>> TestGeometry::ctype = double]’:
>> testbasicgeometry.cc:244:73: instantiated from here
>> testbasicgeometry.cc:47:9: error: ‘const class
>> Dune::GenericGeometry::BasicGeometry<0,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 2, 2> >’ has no member
>> named ‘normal’
>> testbasicgeometry.cc: In function ‘void testBasicGeometry(const
>> TestGeometry&, typename TestGeometry::ctype, bool, int&) [with TestGeometry
>> = Dune::GenericGeometry::BasicGeometry<1,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 2, 2> >, typename
>> TestGeometry::ctype = double]’:
>> testbasicgeometry.cc:277:73: instantiated from here
>> testbasicgeometry.cc:47:9: error: ‘const class
>> Dune::GenericGeometry::BasicGeometry<1,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 2, 2> >’ has no member
>> named ‘normal’
>> testbasicgeometry.cc: In function ‘void testBasicGeometry(const
>> TestGeometry&, typename TestGeometry::ctype, bool, int&) [with TestGeometry
>> = Dune::GenericGeometry::BasicGeometry<2,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 2, 2> >, typename
>> TestGeometry::ctype = double]’:
>> testbasicgeometry.cc:311:73: instantiated from here
>> testbasicgeometry.cc:47:9: error: ‘const class
>> Dune::GenericGeometry::BasicGeometry<2,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 2, 2> >’ has no member
>> named ‘normal’
>> testbasicgeometry.cc: In function ‘void testBasicGeometry(const
>> TestGeometry&, typename TestGeometry::ctype, bool, int&) [with TestGeometry
>> = Dune::GenericGeometry::BasicGeometry<0,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 3, 3> >, typename
>> TestGeometry::ctype = double]’:
>> testbasicgeometry.cc:398:73: instantiated from here
>> testbasicgeometry.cc:47:9: error: ‘const class
>> Dune::GenericGeometry::BasicGeometry<0,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 3, 3> >’ has no member
>> named ‘normal’
>> testbasicgeometry.cc: In function ‘void testBasicGeometry(const
>> TestGeometry&, typename TestGeometry::ctype, bool, int&) [with TestGeometry
>> = Dune::GenericGeometry::BasicGeometry<1,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 3, 3> >, typename
>> TestGeometry::ctype = double]’:
>> testbasicgeometry.cc:431:73: instantiated from here
>> testbasicgeometry.cc:47:9: error: ‘const class
>> Dune::GenericGeometry::BasicGeometry<1,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 3, 3> >’ has no member
>> named ‘normal’
>> testbasicgeometry.cc: In function ‘void testBasicGeometry(const
>> TestGeometry&, typename TestGeometry::ctype, bool, int&) [with TestGeometry
>> = Dune::GenericGeometry::BasicGeometry<2,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 3, 3> >, typename
>> TestGeometry::ctype = double]’:
>> testbasicgeometry.cc:465:73: instantiated from here
>> testbasicgeometry.cc:47:9: error: ‘const class
>> Dune::GenericGeometry::BasicGeometry<2,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 3, 3> >’ has no member
>> named ‘normal’
>> testbasicgeometry.cc: In function ‘void testBasicGeometry(const
>> TestGeometry&, typename TestGeometry::ctype, bool, int&) [with TestGeometry
>> = Dune::GenericGeometry::BasicGeometry<3,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 3, 3> >, typename
>> TestGeometry::ctype = double]’:
>> testbasicgeometry.cc:560:73: instantiated from here
>> testbasicgeometry.cc:47:9: error: ‘const class
>> Dune::GenericGeometry::BasicGeometry<3,
>> Dune::GenericGeometry::DefaultGeometryTraits<double, 3, 3> >’ has no member
>> named ‘normal’
>> make[5]: *** [testbasicgeometry.o] Error 1
>
>
> _______________________________________________
> Dune mailing list
> Dune at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune
--
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
mailing list