On Mon, Jan 13, 2014 at 07:16:01PM +0000, Garth N. Wells wrote: > On 2014-01-13 18:42, Anders Logg wrote: > >On Mon, Jan 13, 2014 at 12:45:11PM +0000, Garth N. Wells wrote: > >>I've just pushed some changes to master, which for > >> > >> from dolfin import * > >> mesh = UnitCubeMesh(128, 128, 128) > >> mesh.init(2) > >> mesh.init(2, 3) > >g> > >>give a factor 2 reduction in memory usage and a factor 2 speedup. > >>Change is at > >>https://bitbucket.org/fenics-project/dolfin/commits/8265008. > >> > >>The improvement is primarily due to d--d connectivity no being > >>computed. I'll submit a pull request to throw an error when d--d > >>connectivity is requested. The only remaining place where d--d is > >>(implicitly) computed is in the code for finding constrained mesh > >>entities (e.g., for periodic bcs). The code in question is > >> > >> for (MeshEntityIterator(facet, dim) e; . . . .) > >> > >>when dim is the same as the topological dimension if the facet. As > >>in other places, it would be consistent (and the original intention > >>of the programmer) if this just iterated over the facet itself > >>rather than all facets attached to it via a vertex. > > > >I don't see why an error message is needed. Could we not just add the > >possibility to specify what d -- d means? It might be useful for other > >algorithms to be able to compute that data. > > > > I think it should be removed because it's (i) ad-hoc, (ii) is not > used/required in the library and (iii) is a memory monster. > Moreover, we have dimension-independent algorithms that work when > d--d connectivity is a connection from an entity to itself (for > which we don't need computation and memory eating). We shouldn't > have an unnecessary, memory monster d-0-d data structure being > created opaquely for no purpose, which is what what > > for (MeshEntityIterator e(entity, dim); . . . .){....} > > does at present when (dimension of entity) = dim. The excessive > memory usage is an issue for big problems. > > If a user wants d-0-d it can be built explicitly, which makes both > the purpose and the intention clear.
How can it be built explicitly without calling mesh.init(d, d)? -- Anders _______________________________________________ fenics mailing list [email protected] http://fenicsproject.org/mailman/listinfo/fenics
