# [petsc-users] Preallocation (Unstructured FE)

Tabrez Ali stali at geology.wisc.edu
Mon May 2 08:16:51 CDT 2011

```Is there a way I can use this and other mesh routines from Fortran? The
manual doesn't say much on this.

Tabrez

On 05/01/2011 09:53 AM, Matthew Knepley wrote:
> On Sat, Apr 30, 2011 at 12:58 PM, Tabrez Ali <stali at geology.wisc.edu
> <mailto:stali at geology.wisc.edu>> wrote:
>
>     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.
>
>
> If you want to see my code doing this, look at
>
>   include/petscdmmesh.hh:preallocateOperatorNew()
>
> which handles the determination of nonzero structure for a FEM
> operator. It should look mostly
>
>     Matt
>
>     Tabrez
>
>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which