On Mon, Dec 31, 2018 at 2:40 AM Justin Chang via petsc-users < petsc-users@mcs.anl.gov> wrote:
> Hi all, > > I am solving a six field battery problem (concentration and potential for > each of the two solid and one electrolyte domains) and I want to experiment > with nested/recursice fieldsplitting. I have the IS's and am able to use > these to define my PCFieldSplitsSetIS(). However, I can imagine this > getting really messy from a programming standpoint, especially once I need > to add temperature into the mix, so it is my hope that I can translate > these index sets and fields into a DM (maybe DMShell?) so that I can just > rely on command line options to play around with various combinations of > field assignments and splits (e.g. -pc_fieldsplit_X_fields) > > However, it doesn't seem clear to me how I would create a DM when you > already know the IS's for each fields. If I understand functions like > DMCreateFieldDecomposition() correctly, it seems that it returns to you the > IS's and sub DM's associated with the original DM, whereas I want to do it > the other way around. Perhaps the "reversal" of something like > DMCreateFieldIS() > <https://www.mcs.anl.gov/petsc/petsc-dev/src/dm/interface/dm.c.html#DMCreateFieldIS>, > where you convert the IS into a PetscSection or is there an easier/better > way? > > Any thoughts/help appreciated! > Paul has recently done this for LibMesh. I believe that constructing a PetscSection is enough to get you minimally started. That allows DMCreateSubDM() to work by subsetting the Section, and that should allow the command line to work. CreateFieldDecomposition() should be removed I think. Thanks, Matt > Justin > -- 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 https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>