[petsc-users] SNES Multblock type

Barry Smith bsmith at mcs.anl.gov
Fri Nov 25 19:17:58 CST 2016


> On Nov 25, 2016, at 7:02 PM, Matthew Knepley <knepley at gmail.com> wrote:
> 
> On Fri, Nov 25, 2016 at 3:13 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
> > On Nov 25, 2016, at 2:38 PM, Arthur Besen Soprano <arthursoprano at gmail.com> wrote:
> >
> > Hi,
> >
> > I was just recently checking some of snes sources code and found a src\snes\impls\multiblock\multiblock.c which seemed to be a Non-linear (SNES) equivalent of the fieldsplit for linear problems (KSP).
> 
>    Yes it was an attempt to be something similar.
> 
> > However I was not able to use it and did not see any options available with the "-help " argument.
> >
> > My question is: Is this module disabled? If not, how can I use it?
> >
> > (using -snes_type multiblock or -npc_snes_type multiblock does not work...)
> 
>    It is not really functional at the moment. The only way for you to use it is to dig through the code to understand it and likely "fix it", that is change the code to do what it should do (note that it may not be clear what it should do). It also might be simpler to write a new SNESFIELDSPLIT that mimics PCFIELDPLIT We always welcome contributions.
> 
> A reason not to base it on FieldSplit is that this serializes the partitions, but we really want them to run in parallel, which is why
> I used ASM as a model for MultiBlock.

   This isn't clear when the code has things like

  PetscInt   nfields;   /* If block is defined on a DA, the number of DA fields */
  PetscInt   *fields;   /* If block is defined on a DA, the list of DA fields */

  Perhaps multiblock was too ambitious since it seems to encompass both subdomain and fieldsplit decompositions inside it. Perhaps they belong in separate SNESXXX.

 From multiblock.c

  char       *name;     /* Block name */
  PetscInt   nfields;   /* If block is defined on a DA, the number of DA fields */
  PetscInt   *fields;   /* If block is defined on a DA, the list of DA fields */
  IS         is;        /* Index sets defining the block */
  VecScatter sctx;      /* Scatter mapping global Vec to blockVec */
  SNES       snes;      /* Solver for this block */
  Vec        x;
  BlockDesc  next, previous;
};

typedef struct {
  PetscBool       issetup;       /* Flag is true after the all ISs and operators have been defined */
  PetscBool       defined;       /* Flag is true after the blocks have been defined, to prevent more blocks from being added */
  PetscBool       defaultblocks; /* Flag is true for a system with a set of 'k' scalar fields with the same layout (and bs = k) */
  PetscInt        numBlocks;     /* Number of blocks (can be fields, domains, etc.) */
  PetscInt        bs;            /* Block size for IS, Vec and Mat structures */
  PCCompositeType type;          /* Solver combination method (additive, multiplicative, etc.) */
  BlockDesc       blocks;        /* Linked list of block descriptors */  I'm not sure where MultiBlock fits in 

 Note there are SNESNASM and SNESASPIN which appear to be other approaches to ASM for nonlinear problems.

   Barry

> 
>    Matt
>  
> 
>   Barry
> 
> >
> > Thanks,
> >
> > Arthur
> >
> > --
> > Arthur B. Soprano
> 
> 
> 
> 
> -- 
> 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



More information about the petsc-users mailing list