Matt, Clearly, I must be missing something. If I loop over the elements and record all edges between the nodes in a face by adding to the vectors "on" and "off" as the algorithm says, won't an edge be counted more than two times in general, thus giving a too big value in "on" and "off"? /Fredrik
Matthew Knepley wrote: > On Mon, Sep 21, 2009 at 4:53 PM, Fredrik Bengzon > <fredrik.bengzon at math.umu.se <mailto:fredrik.bengzon at math.umu.se>> > wrote: > > Hi, > Ryan, I'm aware of Barry's post > > https://lists.mcs.anl.gov/mailman/htdig/petsc-users/2008-May/003020.html > > and it workes fine for triangle meshes. However, I do not see how > this can be used for tetrahedral meshes. > > > It is the same for tetrahedra. In fact, this algorithm can be > generalized to work > for any topology: > > http://arxiv.org/abs/0908.4427 > > Matt > > > /Fredrik > > > Ryan Yan wrote: > > Hi Fredrik, > If I understand correctly, I have the same issue as what you > have here. > > I do not have the code yet(It is also depends on how your > store your matrix data.). But I can forward Barry's idea to > you. Hope this is helpful to you. > > Yan, > > Simply read through the ASCII file(s) twice. The first time > count the number of blocks per row, then preallocate then read > through the ASCII file again reading and setting the values. > This will be very fast. > > Barry > - Hide quoted text - > > > On Sep 20, 2009, at 10:20 AM, Ryan Yan wrote: > > Hi All, > I have a large size application. Mesh size is 30000 nodes, with > dof 25 on each vertex. And it's 3d unstructured, Tet, and Hex > mesh. In the following I will denote blksize=25 > > I am testing how to build up a PETSc matrix object quick > and fast. > > The data I have is Block Compressed Sparse Row(BCSR) files. > And my > objective is to read BCSR files and generate PETSc Binaries > > Firstly, I choose the MATMPIAIJ, I opened the BCSR data > files on > each processor, and set up the preallocation use > > MatMPIAIJSetPreallocation(A,blksize,PETSC_NULL,blksize,PETSC_NULL); > The reason why I choose 25 as the number for d_nz and o_nz > is that > I do not have access to the ordering of the vertices. So > it's the > worst case set up, and it takes about 7 minutes on 30 MIPS > node(180 processors) to write the output into PETSc binaries. > > Secondly, I choose the MatMPIBAIJ, and same procedure as above, > but also set up > > > MatMPIBAIJSetPreallocation(A,blksize,blksize,PETSC_NULL,blksize,PETSC_NULL), > here blksize = 25 and it's also the worst case; This > experiments > takes forever and could not generate the PETSc binaries. > > I guess the reason why it takes so long in the MATMPIBAIJ > case is > that I did not set up the preallocation accurately. Alougth I > think the preallocation is also not accurate in the MATMPIAIJ > case, but it seems like the preallocation effect is not as > serious > as for the MPIBAIJ. Correct me please, if there are other > reasons. > > Can I anyone please give a hint on how to set up the > preallocation > right for a unstructured mesh without knowing the mesh > ordering? > > Thank you very much in advance, > > Yan > > > > > > On Mon, Sep 21, 2009 at 4:24 PM, Fredrik Bengzon > <fredrik.bengzon at math.umu.se > <mailto:fredrik.bengzon at math.umu.se> > <mailto:fredrik.bengzon at math.umu.se > <mailto:fredrik.bengzon at math.umu.se>>> wrote: > > Hi, > This is probably the wrong forum to ask, but does anyone have a > piece of code for computing the correct ndnz and nodnz vectors > needed for assembly of the stiffness (MPIAIJ) matrix on an > unstructured tetrahedral mesh given the node-to-element > adjacency? > Thanks, > Fredrik > > > > > > > -- > What most experimenters take for granted before they begin their > experiments is infinitely more interesting than any results to which > their experiments lead. > -- Norbert Wiener
