[petsc-users] Preallocation (Unstructured FE)
Tabrez Ali
stali at geology.wisc.edu
Sat Apr 30 12:58:52 CDT 2011
Petsc Developers/Users
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.
For a problem of size 100K nodes and 600K tet elements (on 1 cpu)
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).
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
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.
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.
Thanks in advance
Tabrez
More information about the petsc-users
mailing list