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? Johan > Martin > > > > On 28 May 2013 08:38, Garth N. Wells <gn...@cam.ac.uk > <mailto:gn...@cam.ac.uk>> wrote: > > On 28 May 2013 06:15, Martin Sandve Alnæs <marti...@simula.no > <mailto:marti...@simula.no>> 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" <gn...@cam.ac.uk <mailto:gn...@cam.ac.uk>> wrote: > >> > On Monday, 27 May 2013, Jan Blechta wrote: > >> > > >> > > On Mon, 27 May 2013 23:10:47 +0100 > >> > > "Garth N. Wells" <gn...@cam.ac.uk <mailto:gn...@cam.ac.uk> > <javascript:;>> wrote: > >> > > > On 27 May 2013 22:06, Jan Blechta > >> > > > <blec...@karlin.mff.cuni.cz > <mailto:blec...@karlin.mff.cuni.cz><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 > >> > > > > fenics@fenicsproject.org > <mailto:fenics@fenicsproject.org> <javascript:;> > >> > > > > http://fenicsproject.org/mailman/listinfo/fenics > >> > > > _______________________________________________ > >> > > > fenics mailing list > >> > > > fenics@fenicsproject.org <mailto:fenics@fenicsproject.org> > <javascript:;> > >> > > > http://fenicsproject.org/mailman/listinfo/fenics > >> > > > >> > > _______________________________________________ > >> > > fenics mailing list > >> > > fenics@fenicsproject.org <mailto:fenics@fenicsproject.org> > <javascript:;> > >> > > http://fenicsproject.org/mailman/listinfo/fenics > >> > > > >> > > >> > > >> > >> _______________________________________________ > >> fenics mailing list > >> fenics@fenicsproject.org <mailto:fenics@fenicsproject.org> > >> http://fenicsproject.org/mailman/listinfo/fenics > > > > > _______________________________________________ > fenics mailing list > fenics@fenicsproject.org > http://fenicsproject.org/mailman/listinfo/fenics > _______________________________________________ fenics mailing list fenics@fenicsproject.org http://fenicsproject.org/mailman/listinfo/fenics