On 12/09/2010 03:49 PM, Roy Stogner wrote:
> On Thu, 9 Dec 2010, Michael Povolotskyi wrote:
>> My problem is that the coarse mesh cannot fit the on one CPU.
>> Therefore I'd like to create it in parallel in a distributed way.
>> Is this possible?
> The good news:
> ParallelMesh was designed to make this possible.
> MeshBase::add_point()/add_elem() let you create new mesh nodes and
> elements that are preassigned to specific processors and that don't
> necessarily have to exist, even from step one, on other processors,
> and the ParallelMesh routines will let these unstructured submesh
> chunks still behave as a whole consistent mesh.
> The bad news:
> You'll probably have to set node and element ids manually in the
> initial creation step, and you'll need to explicitly remember to
> create all semilocal objects on every processor that needs them - this
> may be a lot of bookkeeping depending on your mesh.
> Nobody's ever done this before. Distributed mesh usage is already
> undertested (it's not even in our regular continuous regression test
> suite at the moment); for distributed mesh creation you'd be the first
> user I know of.
> You may find it easier to do the mesh creation from another program
> that can save to Nemesis format and read it into libMesh from that?
> IIRC the mesh reading is currently serialized, but it's done in chunks
> (which are freed after being distributed off the root node) to
> conserve memory, so if memory-per-node is your limitation then that
> will probably get around it.
Dear Roy and Dereck
I'm very glad that in principle this is possible.
The idea to use files sounds interesting, but I'd like to try the
distributed creation first.
If it works, I'll write a report to the maillist and, may be, someone
else founds it useful.
I have a couple of simple questions:
1) In the ParallelMesh class the functions reserve_nodes or reserve_elem
do nothing, right?
Is there any way to preallocate memory for points and elements?
2) Is the following statement correct:
If, after adding all the nodes and all the elements, I set the
partitioner pointer to NULL and call the prepare_for_use() function,
then the mesh will be ready for use.