Nicolas,

    For "simple" PCFIELDSPLIT it is possible to pass down the attached 
coordinate information. By simple I mean where the splitting is done by fields 
and not by general lists of IS (where one does not have enough information to 
know what the coordinates would mean to the subPCS).

   Look in fieldsplit.c PCFieldSplitSetFields_FieldSplit() where it does the 
KSPCreate(). I think you can do a KSPGetPC() on that ksp and PCSetCoordinates 
on that PC to supply the coordinates to the subPC. In the function 
PCFieldSplitSetIS_FieldSplit() you can also attach the coordinates to the 
subPCs IF defaultsplit is true.

   Sadly this is not the full story. The outer PC will not have any coordinates 
because calling PCSetCoordinates on a PCFIELDSPLIT does nothing since 
fieldsplit doesn't handle coordinates. So you need to do more, you need to 
provide a PCSetCoordinates_FieldSplit() that saves the coordinates in new 
entries in the PC_FieldSplit struct and then in 
PCFieldSplitSetFields_FieldSplit() you need to access those saved values and 
pass them into the PCSetCoordinates() that you call on the subPCs. Once you 
write 
PCSetCoordinates_FieldSplit()  you need to call 

  ierr = 
PetscObjectComposeFunction((PetscObject)pc,"PCSetCoordinates_C",PCSetCoordinates_FieldSplit);CHKERRQ(ierr);
 

inside PCCreate_FieldSplit().

   Any questions just let us know.

  Barry


> On Jan 11, 2022, at 11:58 AM, Nicolás Barnafi <[email protected]> wrote:
> 
> Dear community, 
> 
> I am working on a block preconditioner, where one of the blocks uses HYPRE's 
> AMS. As it requires the coordinates of the dofs, I have done so to the PC 
> object. I expected the coordinates to be inherited down to the subblocks, is 
> this not the case? (it seems so as I couldn't find a specialized FIELDSPLIT 
> SetCoordinates function). 
> 
> If this feature is missing, please give me some hints on where to add the 
> missing function, I would gladly do it. If not, please let me know why it was 
> dismissed, in order to do things the hard way [as in hard-coded ;)]. 
> 
> Kind regards, 
> Nicolas

Reply via email to