[petsc-users] Nested Fieldsplit for custom index sets

Safin, Artur aks084000 at utdallas.edu
Tue Jul 26 21:54:22 CDT 2016


Barry,

> Do you have a call to KSPSetFromOptions() before the call PCFieldSplitGetSubKSP()? I am guessing not which means that the PC does not yet know that it is of type fieldplit.

Yes, I call KSPSetFromOptions() for the global matrix at the beginning of the code. Should I also do it for the ksp I obtain from PCFieldSplitGetSubKSP()?

The program has no problem doing fieldsplit for the global matrix; my issue is that I cannot get it to recognize a fieldsplit within a fieldsplit.

This is the whole code for the solver:

--------------------------------------------------------------------------------------------------------------------------------
  KSP ksp;
  KSPCreate(mpi_communicator, &ksp);
  KSPSetType(ksp, KSPGMRES);
  KSPSetOperators(ksp, A_petsc, A_petsc);
  KSPSetFromOptions(ksp);

  PC pc;
  KSPGetPC(ksp, &pc);

  // Define the fieldsplit for the global matrix
  PCFieldSplitSetIS(pc, "P", P_IS);
  PCFieldSplitSetIS(pc, "T", T_IS);

  // fieldsplit for submatrix P:
  KSP *ksp_all, ksp_P;
  PCFieldSplitGetSubKSP(pc, &i, &ksp_all);

  ksp_P = ksp_all[0];
  PC pc_P;
  KSPGetPC(ksp_P, &pc_P); // This should be the preconditioner for fieldsplit P
  PCFieldSplitSetIS(pc_P, "A", P_A_IS);
  PCFieldSplitSetIS(pc_P, "B", P_B_IS);

  KSPSolve(ksp, b_petsc, u_petsc);
--------------------------------------------------------------------------------------------------------------------------------

Thanks,

Artur



More information about the petsc-users mailing list