Hi Anna,

This looks like a bug at our end. I reworked some of this stuff while David was doing the real space and some of the assumptions I make are probably not valid in that case. I am moving house this week. Let me try and get to it next week. 

Lawrence 
On 12 Oct 2016, at 17:31, Anna Kalogirou <a.kalogirou@leeds.ac.uk> wrote:

Hi Lawrence,

How do I precondition a mixed space with 4 fields? Following the instructions in the Firedrake website for 3 fields, I used:

parameters = {"pc_type": "fieldsplit",

             "pc_fieldsplit_type": "schur",

             "pc_fieldsplit_0_fields": "0, 1, 2", # first split contains first three fields, second contains the fourth

             "pc_fieldsplit_1_fields": "3",

             # Multiplicative fieldsplit for first field

             "fieldsplit_0_pc_type": "fieldsplit",

             "fieldsplit_0_pc_fieldsplit_type": "multiplicative",

             "fieldsplit_0_fieldsplit_0_pc_type": "lu", # LU on each field

             "fieldsplit_0_fieldsplit_1_pc_type": "lu",

             "fieldsplit_0_fieldsplit_2_pc_type": "lu",

             "fieldsplit_1_pc_type": "ilu"} # ILU on the schur complement block


but I get the error below. It seems to be related to the RealFunctionSpaces, but I might also be doing something wrong.

Thanks,

Anna.


Traceback (most recent call last):

 File "/e/data1/users/matak/opt/firedrake/Ship/Modules/Inequality constraint/Mixed system/solvers.py", line 176, in solvers_SV

   F_solver.solve()                            # Solve for phi0_5, eta1, lambda0_5, mu0_5

 File "/e/data1/users/matak/opt/firedrake-installation/firedrake/src/firedrake/firedrake/variational_solver.py", line 201, in solve

   self.snes.solve(None, v)

 File "PETSc/SNES.pyx", line 537, in petsc4py.PETSc.SNES.solve (src/petsc4py.PETSc.c:170012)

 File "PETSc/petscdmshell.pxi", line 285, in petsc4py.PETSc.DMSHELL_CreateFieldDecomposition (src/petsc4py.PETSc.c:48877)

 File "/e/data1/users/matak/opt/firedrake-installation/firedrake/src/firedrake/firedrake/functionspaceimpl.py", line 744, in create_field_decomp

   dms = [V._dm for V in W]

 File "/e/data1/users/matak/opt/firedrake-installation/firedrake/src/PyOP2/pyop2/utils.py", line 64, in __get__

   obj.__dict__[self.__name__] = result = self.fget(obj)

 File "/e/data1/users/matak/opt/firedrake-installation/firedrake/src/firedrake/firedrake/functionspaceimpl.py", line 318, in _dm

   dm.setDefaultSection(self._shared_data.global_numbering)

AttributeError: 'RealFunctionSpace' object has no attribute '_shared_data'




On 10/10/16 18:29, Lawrence Mitchell wrote:
On 10 Oct 2016, at 18:19, Colin Cotter <colin.cotter@imperial.ac.uk> wrote:

OK, this is the problem then - you need to find an appropriate preconditioner.

You need to start by finding an appropriate preconditioner for the system without the R space part.

Lawrence: once that is done, is there anything special to do to incorporate it into the system with the R space part [asking because you seem to have thought about this previously], or do we just recommend block preconditioning in this case?
I think you could use block first.  It's easier.  Otherwise I think the firedrake webpages sketch how to do sherman-morrison.

Lawrence
_______________________________________________
firedrake mailing list
firedrake@imperial.ac.uk
https://mailman.ic.ac.uk/mailman/listinfo/firedrake


_______________________________________________
firedrake mailing list
firedrake@imperial.ac.uk
https://mailman.ic.ac.uk/mailman/listinfo/firedrake