[petsc-users] Help with petsc4py and PC Python type

Jed Brown jed at jedbrown.org
Tue Jan 22 16:52:11 CST 2019


My preference is to put this auxiliary information on the Mat (or the
Mat's DM; see MatGetDM()).  It's really declarative information about
the operator, not algorithmic parameters for the PC (like a threshold in
AMG, number of smoothing iterations, etc.).

Justin Chang <jychang48 at gmail.com> writes:

> As of right now, the dict() is something the user constructs inside
> mycode.py. It would contain things like the viscosity, boundary conditions,
> function space, etc which are needed to construct the PC operators in
> MyPCD. I believe I saw the Firedrake guys do something similar to this
>
> On Tue, Jan 22, 2019 at 3:27 PM Jed Brown <jed at jedbrown.org> wrote:
>
>> Justin Chang via petsc-users <petsc-users at mcs.anl.gov> writes:
>>
>> > Hi all,
>> >
>> > I am attempting to write my own scour preconditioner for a
>> FEniCS/petsc4py.
>> > I managed to attach a DMShell to the KSP so that I can employ
>> command-line
>> > options for field splitting. Suppose I want to solve the Navier-Stokes
>> > equation and have the following command-line options:
>> >
>> > -ksp_type fgmres
>> > -pc_type fieldsplit
>> > -pc_fieldsplit_type schur
>> > -pc_fieldsplit_schur_fact_type full
>> > -fieldsplit_0_ksp_type gmres
>> > -fieldsplit_0_pc_type hypre
>> > -fieldsplit_1_ksp_type preonly
>> > -fieldsplit_1_pc_type python
>> > -fieldsplit_1_pc_python_type pfibs.MyPCD
>> >
>> > Where MyPCD is part of my pfibs module and looks something like this:
>> >
>> > class MyPCD(object):
>> >     def setUp(self, pc):
>> >           # Do something #
>> >              ....
>> >     def apply(self, pc, x, y):
>> >           # Do something #
>> >              ....
>> >
>> > The problem is that in my actual python code (mycode.py) I have a dict()
>>
>> Where does this dict come from?  When is it available?
>>
>> > object that I would like to pass into the setUp() call inside MyPCD to
>> read
>> > in, but it is not clear how I can do this if I set the pc python type via
>> > command line options. If I hard-coded this, I would just call
>> > pc.setPythonContext(...) but I was wondering if there's a way to do this,
>> > e.g., attaching an appctx/dict to the pc itself. Does anyone have ideas
>> or
>> > suggestions on how to go about doing this?
>> >
>> > Thanks,
>> > Justin
>>


More information about the petsc-users mailing list