Hi, I just want to share my experience with FE assembly. I think the problem of preallocation in finite element matrices is that you don't know how many elements are connected to a given node, there can be 5, 20 elements or more. You can build a structure with the number of nodes connected to a node and then preallocate the matrix but this is not very efficient.
I know UMFPACK has a method of forming triplets with the matrix information and then it has routines to add duplicate entries and compress the data in a compressed matrix format. Although I have never used UMFPACK with PETSC. I also don't know if there are similiar functions in PETSC optimized for FE matrix assembly. Regards, Billy. -----Mensagem original----- De: owner-petsc-users at mcs.anl.gov em nome de Barry Smith Enviada: qua 28-05-2008 16:03 Para: petsc-users at mcs.anl.gov Assunto: Re: Slow MatSetValues http://www-unix.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manual.pdf#sec_matsparse http://www-unix.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatCreateMPIAIJ.html Also, slightl less important, collapse the 4 MatSetValues() below into a single call that does the little two by two block Barry On May 28, 2008, at 9:07 AM, Lars Rindorf wrote: > Hi everybody > > I have a problem with MatSetValues, since the building of my matrix > takes much longer (35 s) than its solution (0.2 s). When the number > of degrees of freedom is increased, then the problem worsens. The > rate of which the elements of the (sparse) matrix is set also seems > to decrease with the number of elements already set. That is, it > becomes slower near the end. > > The structure of my program is something like: > > for element in finite elements > for dof in element > for equations in FEM formulation > ierr = MatSetValues(M->M,1,&i,1,&j,&tmp,ADD_Values); > ierr = MatSetValues(M->M,1,&k,1,&l,&tmp,ADD_Values); > ierr = MatSetValues(M->M,1,&i,1,&l,&tmp,ADD_Values); > ierr = MatSetValues(M->M,1,&k,1,&j,&tmp,ADD_Values); > > > where i,j,k,l are appropriate integers and tmp is a double value to > be added. > > The code has fine worked with previous version of petsc (not > compiled by me). The version of petsc that I use is slightly newer > (I think), 2.3.3 vs ~2.3. > > Is it something of an dynamic allocation problem? I have tried using > MatSetValuesBlock, but this is only slightly faster. If I monitor > the program's CPU and memory consumption then the CPU is 100 % used > and the memory consumption is only 20-30 mb. > > My computer is a red hat linux with a xeon quad core processor. I > use Intel's MKL blas and lapack. > > What should I do to speed up the petsc? > > Kind regards > Lars > _____________________________ > > > Lars Rindorf > M.Sc., Ph.D. > > http://www.dti.dk > > Danish Technological Institute > Gregersensvej > > 2630 Taastrup > > Denmark > Phone +45 72 20 20 00 > > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20080529/cf987911/attachment.htm>
