mspieg wrote: > Hi All, > I'm playing with some characteristic based advection schemes in > Dolfin (0.9.0) which require a large number of discrete Function evals. > This seems to be leading to a large memory leak as the process grows > considerably in size with every time-step. I've put together a small > (badly written) program that demonstrates the problem which I've tried > to isolate just to IntersectionDetector (and the underlying GTS). I > suspect the problem is in GTS, but thought I would start with Dolfin > support. Any thoughts/help greatly appreciated... >
I recall that quite some time ago some memory leaks were fixed in the DOLFIN GTS interface, but there remained some GTS problems. Have you run valgrind? Garth > Cheers > marc > ---------------------------------------------------- > Marc Spiegelman > Lamont-Doherty Earth Observatory > Dept. of Applied Physics/Applied Math > Columbia University > http://www.ldeo.columbia.edu/~mspieg > tel: 845 704 2323 (SkypeIn) > ---------------------------------------------------- > > > p.s. Some basic info > Dolfin (0.9.0) hg development version (ported to PETSc-3.0.0) > GTS (0.7.6) built from source > MacOSX 10.4.11 > g++ i686-apple-darwin8-g++-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build > 5370) > boost 1.33.1 > > test code > ---------------------------------------------- > // Copyright (C) 2009 Marc Spiegelman > // Licensed under the GNU LGPL Version 2.1. > // > // First added: 2008-10-08 > // Last changed: 5 Feb 2009 17:16:07 > // > // Heavily modified from dolfin/demo/mesh/intersection code > // Program to demonstrated memory leak from large number of random GTS > intersectionDetector tests > // uses boost uniform random number generator for fun > // > // Note: if you just continually test the point {0.5, 0.5} (comment out > the random number generator) > // the number of intersected cells is 6 rather than 1 and the memory > leak is much more pronounced > // > > #include <dolfin.h> > #include <boost/random.hpp> > > using namespace dolfin; > > typedef boost::mt19937 base_generator_type; > > int main() > { > // Create square mesh > unsigned int N = 64; > UnitSquare mesh(N, N); > > //create IntersectionDetector > IntersectionDetector ID(mesh); > > // set initial point > double x[2] = {0.5, 0.5 }; > Point p(2,x); > > //initialize cell Array > std::vector<dolfin::uint> cells; > std::vector<dolfin::uint>::iterator cellIterator; > > //setup boost uniform variate random number generators > base_generator_type generator(42u); > boost::uniform_real<> uni_dist(0,1); > boost::variate_generator<base_generator_type&, boost::uniform_real<> > > uni(generator, uni_dist); > > dolfin::uint k, k_max = N*N*5000, k_print = 100; > dolfin::uint n_cells, n_cells_print=2; > > //calculate a random intersection k_max times > for (k = 0; k < k_max; k++ ) { > ID.intersection(p, cells); > n_cells = cells.size(); > > //print out information if number of cells in intersection matches > n_cells_print (or every k_print grid_sweep) > if (n_cells >= n_cells_print || k%(N*N*k_print) == 0 ) { > printf("k=%d, p=[%f, %f], NCells=%d: ", k, p.x(), p.y(), (int) > cells.size()) ; > for (cellIterator = cells.begin(); cellIterator < cells.end(); > cellIterator++) { > printf("%d ",*cellIterator); > } > printf("\n"); > } > > // get new random point (comment out to really blow up) > p[0] = uni(); > p[1] = uni(); > > // clear cells array (cells grows with every test otherwise, not > sure if this generates a memory leak) > cells.clear(); > } > return(0); > } > > > > > > > > > > > > > > > ------------------------------------------------------------------------ > > _______________________________________________ > DOLFIN-dev mailing list > [email protected] > http://www.fenics.org/mailman/listinfo/dolfin-dev _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
