On Apr 7, 2017, at 6:25 AM, Matthew Knepley <[email protected]<mailto:[email protected]>> wrote:
On Thu, Apr 6, 2017 at 1:04 PM, Abhyankar, Shrirang G. <[email protected]<mailto:[email protected]>> wrote: I am solving a time-dependent problem using DMNetwork (uses DMPlex internally) to manage the network. To find the initial conditions, I need to solve a nonlinear problem on the same network but with different number of dofs on the nodes and edges. Question: Can I reuse the same DMNetwork (DMPlex) for solving the two problems. The way I am trying to approach this currently is by creating two PetscSections to be used with Plex. The first one is used for the initial conditions and the second one is for the time-stepping. Here¹s the code I have This is the right way to do it, but its easier if you call DMClone() first to get a new DM with the same Plex, and then change its default Section and solve your problem with it. Thanks Matt. Doesn't DMClone() make a shallow copy for Plex? So any section set for the cloned Plex will also be set for the original one? Matt for(i=vStart; i < vEnd; i++) { /* Two variables at each vertex for the initial condition problem */ ierr = PetscSectionSetDof(dyn->initpflowpsection,i,2);CHKERRQ(ierr); } ierr = PetscSectionSetUp(dyn->initpflowpsection);CHKERRQ(ierr); /* Get the plex dm */ ierr = DMNetworkGetPlex(networkdm,&plexdm);CHKERRQ(ierr); /* Get default sections associated with this plex set for time-stepping */ ierr = DMGetDefaultSection(plexdm,&dyn->defaultsection);CHKERRQ(ierr); ierr = DMGetDefaultGlobalSection(plexdm,&dyn->defaultglobalsection);CHKERRQ(ierr); /* Increase the reference count so that the section does not get destroyed when a new one is set with DMSetDefaultSection */ ierr = PetscObjectReference((PetscObject)dyn->defaultsection);CHKERRQ(ierr); ierr = PetscObjectReference((PetscObject)dyn->defaultglobalsection);CHKERRQ(ierr); /* Set the new section created for initial conditions */ ierr = DMSetDefaultSection(plexdm,dyn->initpflowpsection);CHKERRQ(ierr); ierr = DMGetDefaultGlobalSection(plexdm,&dyn->initpflowpglobsection);CHKERRQ(ierr) ; Would this work or should I rather use DMPlexCreateSection to create the PetscSection used for initial conditions (dyn->initpflowpsection)? Any other problems that I should be aware of? Has anyone else attempted using the same plex for solving two different problems? Thanks, Shri -- 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
