On 28 May 2013 08:42, Johan Hake <[email protected]> wrote:
> On 05/28/2013 09:35 AM, Martin Sandve Alnæs wrote:
>> What I fundamentally want is to read the Mesh and MeshValueCollection(s)
>> that reside in the File. What is the purpose for storing the domains in
>> the Mesh object?
>
> I think they naturally belong to the mesh.
>
>> I think the constructor is cleaner but the std::map/dict construction is
>> unnecessary overhead and too costly for dense mesh value collections.
>>
>> A free function can hopefully avoid this overhead by using the existing
>> MeshFunction constructor taking a MeshValueCollection, which is what the
>> mesh file reader constructs in the first place.
>
> Looking at the code it looks like MeshValueColletion is not used to
> store the markers. Just a std::map. Is MeshValueColletion used anymore?
>

MeshValueCollection is a class just like MeshFunction and can still be
used. MeshValueCollection uses much less memory in common cases, e.g..
when marking boundary facets only.

The whole point was to remove the circular dependency - (Mesh -
MeshDomains/MeshValueCollection - Mesh - . . . . ) - which is why
MeshDomains uses plain data types and not types that require a Mesh.
MeshFunction and MeshValueCollection are both templated, which was
marking finding an include order for header files that the compiler
would swallow difficult.

Garth

> Johan
>
>> Martin
>>
>>
>>
>> On 28 May 2013 08:38, Garth N. Wells <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>>     On 28 May 2013 06:15, Martin Sandve Alnæs <[email protected]
>>     <mailto:[email protected]>> wrote:
>>     > A dict on the python side? Ouch! That is quite costly in terms of
>>     memory.
>>     > Each key and value object has a python overhead of about 50 bytes
>>     each.
>>     >
>>
>>     I'm aware of this. There were essentially no unit tests or demos on
>>     this, so it wasn't clear if MeshData was accessed outside the library
>>     internals or not. If its used for purposes other than debugging, which
>>     it appears to be, this can be changed.
>>
>>     > In addition to breaking lots of stuff as Jan points out, this
>>     change is not
>>     > thought through.
>>     >
>>
>>     It has been extensively thought through - re-implementing fragile code
>>     for the sake of fragile code is not thinking through. 'lot's' is an
>>     exaggeration.
>>
>>     > Wasn't facet_domains() there only for explicitly getting a
>>     MeshFunction? An
>>     > external helper function instead would be fine, I always found the
>>     data flow
>>     > there a bit strange.
>>     >
>>
>>     Two possibilities, both anticipated, are:
>>
>>         - A free function to build a MeshFunction from a Mesh and MeshData
>>         - A MeshFunction constructor that takes a Mesh and a std::map
>>
>>     The former is better for hiding data, the latter is perhaps a bit
>>     cleaner. Both are memory robust and explicit (the old code was
>>     neither). Preferences?
>>
>>     Garth
>>
>>     > Martin
>>     >
>>     > tirsdag 28. mai 2013 skrev Jan Blechta følgende:
>>     >>
>>     >> On Mon, 27 May 2013 23:32:12 +0100
>>     >> "Garth N. Wells" <[email protected] <mailto:[email protected]>> wrote:
>>     >> > On Monday, 27 May 2013, Jan Blechta wrote:
>>     >> >
>>     >> > > On Mon, 27 May 2013 23:10:47 +0100
>>     >> > > "Garth N. Wells" <[email protected] <mailto:[email protected]>
>>     <javascript:;>> wrote:
>>     >> > > > On 27 May 2013 22:06, Jan Blechta
>>     >> > > > <[email protected]
>>     <mailto:[email protected]><javascript:;>>
>>     >> > > wrote:
>>     >> > > > > How do I obtain FacetFunction
>>     >> > > > >   fd = mesh.domains().facet_domains()
>>     >> > > > > with redesigned MeshDomains?
>>     >> > > > >
>>     >> > > >
>>     >> > > >   D = mesh.topology().dim()
>>     >> > > >   fd = mesh.domains().markers(D - 1)
>>     >> > > >
>>     >> > > > 'fd' is now not a MeshFunction (std::map from C++ and a dict on
>>     >> > > > the Python side). It was necessary to change the type to
>>     remove a
>>     >> > > > circular dependency that was making new developments
>>     >> > > > exponentially more complicated and to make memory management
>>     >> > > > robust. A lot of boilerplate code was removed.
>>     >> > > >
>>     >> > > > If it turns out that a MeshFunction is required, we could add a
>>     >> > > > MeshFunction constructor to make it simple to make a
>>     MeshFunction.
>>     >> > >
>>     >> > > Indeed, MeshFunction is needed to feed DirichletBC or Measure.
>>     >> >
>>     >> >
>>     >> > You can create Dirichlet bcs that use the domain markers without
>>     >> > accessing the domain markers directly. See test_meshdomain_bcs in:
>>     >> >
>>     >> >
>>     >> >
>>     
>> https://bitbucket.org/fenics-project/dolfin/src/1247bb468d88885d57abbe74cbb82984818eacfd/test/unit/fem/python/DirichletBC.py?at=master
>>     >>
>>     >> You're right here. But other use cases:
>>     >>   - Measure
>>     >>   - output to file
>>     >>   - computations of other mesh functions
>>     >>
>>     >> The last point is easily solved but others, I think, not. Such a
>>     >> constructor will enable users to adapt working code with 2 line
>>     patch.
>>     >> So I filed an issue.
>>     >>
>>     >> Jan
>>     >>
>>     >> >
>>     >> > Garth
>>     >> >
>>     >> >
>>     >> >
>>     >> > > Jan
>>     >> > >
>>     >> > > >
>>     >> > > > Garth
>>     >> > > >
>>     >> > > > > Jan
>>     >> > > > > _______________________________________________
>>     >> > > > > fenics mailing list
>>     >> > > > > [email protected]
>>     <mailto:[email protected]> <javascript:;>
>>     >> > > > > http://fenicsproject.org/mailman/listinfo/fenics
>>     >> > > > _______________________________________________
>>     >> > > > fenics mailing list
>>     >> > > > [email protected] <mailto:[email protected]>
>>     <javascript:;>
>>     >> > > > http://fenicsproject.org/mailman/listinfo/fenics
>>     >> > >
>>     >> > > _______________________________________________
>>     >> > > fenics mailing list
>>     >> > > [email protected] <mailto:[email protected]>
>>     <javascript:;>
>>     >> > > http://fenicsproject.org/mailman/listinfo/fenics
>>     >> > >
>>     >> >
>>     >> >
>>     >>
>>     >> _______________________________________________
>>     >> fenics mailing list
>>     >> [email protected] <mailto:[email protected]>
>>     >> http://fenicsproject.org/mailman/listinfo/fenics
>>
>>
>>
>>
>> _______________________________________________
>> fenics mailing list
>> [email protected]
>> http://fenicsproject.org/mailman/listinfo/fenics
>>
>
_______________________________________________
fenics mailing list
[email protected]
http://fenicsproject.org/mailman/listinfo/fenics

Reply via email to