On Tue, May 17, 2011 at 9:36 AM, Tabrez Ali <span dir="ltr"><<a href="mailto:stali@geology.wisc.edu">stali@geology.wisc.edu</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div text="#000000" bgcolor="#ffffff">
Matt<br>
<br>
An example which reads an unstructured mesh (ascii or exodus),
partitions it and sets up Mat (with the right preallocation) would
be great. If it is in Fortran then that would be perfect. Btw my
problem also has Lagrange multiplier constraints.<br></div></blockquote><div><br></div><div>Yes, I should have been more specific. What element?</div><div><br></div><div> Thanks,</div><div><br></div><div> Matt</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div text="#000000" bgcolor="#ffffff">
Thanks<br><font color="#888888">
Tabrez</font><div><div></div><div class="h5"><br>
<br>
On 05/17/2011 08:25 AM, Matthew Knepley wrote:
<blockquote type="cite">On Mon, May 2, 2011 at 8:16 AM, Tabrez Ali <span dir="ltr"><<a href="mailto:stali@geology.wisc.edu" target="_blank">stali@geology.wisc.edu</a>></span>
wrote:<br>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">
<div text="#000000" bgcolor="#ffffff"> Is there a way I can
use this and other mesh routines from Fortran? The manual
doesn't say much on this.</div>
</blockquote>
<div><br>
</div>
<div>Yes, but you are right that nothing is in the manual.
DMMESH (in petsc-dev) now obeys the full DM interface,</div>
<div>so that DMGetMatrix() will return you a properly allocated
Mat. So what is the problem? Of course, it is that</div>
<div>Petsc has no good way to specify what finite element you
are dealing with.</div>
<div><br>
</div>
<div>The way I was doing this is to encode it using some C++
classes. This turns out to be a bad way to do things.</div>
<div>
I am currently reworking it so that this information is stored
in a simple C struct that you can produce. Should</div>
<div>have this done soon.</div>
<div><br>
</div>
<div>Can you mail me a description of an example you would like
to run?</div>
<div><br>
</div>
<div> Thanks,</div>
<div><br>
</div>
<div> Matt</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">
<div text="#000000" bgcolor="#ffffff">
<font color="#888888"><br>
Tabrez</font>
<div>
<div><br>
<br>
On 05/01/2011 09:53 AM, Matthew Knepley wrote:
<blockquote type="cite">On Sat, Apr 30, 2011 at 12:58
PM, Tabrez Ali <span dir="ltr"><<a href="mailto:stali@geology.wisc.edu" target="_blank">stali@geology.wisc.edu</a>></span>
wrote:<br>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex"> Petsc
Developers/Users<br>
<br>
I having some performance issues with
preallocation in a fully unstructured FE code. It
would be very helpful if those using FE codes can
comment.<br>
<br>
For a problem of size 100K nodes and 600K tet
elements (on 1 cpu)<br>
<br>
1. If I calculate the _exact_ number of non-zeros
per row (using a running list in Fortran) by
looping over nodes & elements, the code takes
17 mins (to calculate nnz's/per row, assemble and
solve).<br>
2. If I dont use a running list and simply get the
average of the max number of nodes a node might be
connected to (again by looping over nodes &
elements but not using a running list) then it
takes 8 mins<br>
3. If I just magically guess the right value
calculated in 2 and use that as average nnz per
row then it only takes 25 secs.<br>
<br>
Basically in all cases Assembly and Solve are very
fast (few seconds) but the nnz calculation itself
(in 2 and 3) takes a long time. How can this be
cut down? Is there a heuristic way to estimate the
number (as done in 3) even if it slightly
overestimates the nnz's per row or are efficient
ways to do step 1 or 2. Right now I have do
i=1,num_nodes; do j=1,num_elements ... which
obviously is slow for large number of
nodes/elements.<br>
</blockquote>
<div><br>
</div>
<div>If you want to see my code doing this, look at</div>
<div><br>
</div>
<div> include/petscdmmesh.hh:preallocateOperatorNew()</div>
<div><br>
</div>
<div>which handles the determination of nonzero
structure for a FEM operator. It should look
mostly</div>
<div>like your own code.</div>
<div><br>
</div>
<div> Matt</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex"> Thanks in advance<br>
<font color="#888888"> Tabrez<br>
</font></blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
What most experimenters take for granted before they
begin their experiments is infinitely more interesting
than any results to which their experiments lead.<br>
-- Norbert Wiener<br>
</blockquote>
<br>
</div>
</div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to
which their experiments lead.<br>
-- Norbert Wiener<br>
</blockquote>
<br>
</div></div></div>
</blockquote></div><br><br clear="all"><br>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener<br>