Ok, I'm starting to understand.
So the command line options won't consider the cases when you have more than
one dof per node or (as in my dG code) per element.
Even if I use --node_major_dofs I'm getting something like
u0,u1,u2,u3,v0,v1,v2,v3,w0,w1,w2,w3,p0,p1,p2,p3 in each element for a first
order approximation in 3D.
I'm trying something like
--node_major_dofs -pc_type fieldsplit -pc_fieldsplit_block_size 16
-pc_fieldsplit_0_fields 0,1,2,3,4,5,6,7,8,9,10,11 -pc_fieldsplit_1_fields
12,13,14,15 -pc_fieldsplit_type schur -pc_fieldsplit_schur_precondition self
Does it make sense?
I still need better preconditioning than nothing in my schur complement!
2010/4/29 Jed Brown <jed@...>
> On Thu, 29 Apr 2010 14:18:23 +0200, Lorenzo Botti <bottilorenzo@...>
> > >
> > >
> > >
> > > Yeah, specifying the fields with options like -pc_fieldsplit_0_field
> > > 0,1,2 requires a collocated discretization where the fields at each
> > > are interlaced (this gives better performance anyway). It won't work
> > > for mixed discretizations, or where the fields are not interlaced. In
> > > that case, you should set them with PCFieldSplitSetIS().
> > >
> > >
> > I'm not sure I understand this point.
> > What do you mean with interlaced? Isn't the off-diagonal block realizing
> > inter-field coupling?
> Interlaced is sometimes called nodal blocking. The idea is that you
> have [u0,v0,p0,u1,...] instead of [u0,u1,...,v0,v1,...,p0,p1,...]. The
> former is only possible for non-mixed discretizations.
> > I'm looking at the source code and PCSetUp_FieldSplit() is creating the
> > according to the field splits.
> > What kind of situation can I manage with with PCFieldSplitSetIS() ?
> Hopefully you are looking at PETSc-3.1 (or -dev). The implementation
> treats both the cases where the split is defined in terms of the nodal
> blocks, and where the index sets were provided explicitly with
> PCFieldSplitSetIS() which allows you to put any set of variables in any
> number of splits. Just create an IS for each field if your variables
> have a different numbering or if you want to order/group them
> The special treatment for nodal blocking is only provided for the cases
> where it is natural to the problem in which case it gives you a
> convenient way to play around at runtime, otherwise specifying the
> fields requires a problem-sized amount of information and thus cannot be
> specified at runtime.