Of course, you are right.
In retrospect, trying to create the natural to global SF during distribution 
does not seem to be the smartest idea…
Would you have time to take a pass at distributing the constrains?
On our side, we will work on patch that separates the creation of the 
Naturaltoglobal SF from distribution, and works when the default section was 
created on the sequential or distributed DM.
It would just be noce to have both cases working

Regards,
Blaise



On Feb 23, 2019, at 2:39 PM, Matthew Knepley 
<[email protected]<mailto:[email protected]>> wrote:

On Sat, Feb 23, 2019 at 10:48 AM Blaise A Bourdin via petsc-users 
<[email protected]<mailto:[email protected]>> wrote:
Hi,

My student Alex and I are trying to build an example combining natural to 
global ordering and constraints.
Constraints information do not seem to be distributed,

Well dang. That is true. I never considered doing it the other way since all my 
specifications come from compact things
like an FEM discretization and BC labels, which get distributed. But yes, this 
is a big hole. I think it could be fixed without
too much work since the constraints are just another section+IS to distribute, 
and the IS does not even have to be renumbered.
I think we can just call 
https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DMPLEX/DMPlexDistributeFieldIS.html
 on it.

so the most rational thing to do seems to be creating the default section after 
distribution, then figuring out a way to reconstruct the natural to global 
stuff.

That is what I do, but we could do it the other way.

In the example attached, we do this, then create a global vector, but for some 
reason that I do not understand, the global vector size is 0 (should be 18) 
when run on more than 1 CPU. If we make 2 calls to DMGetGlobalVector, we get a 
vector of the proper size. What are we doing wrong?

At the beginning, you turn on

  DMSetUseNatural(dm, PETSC_TRUE);

so during Distribute() it tries to make the mapping. This process creates a 
global vector, which has size 0, because
the Section is empty. The reason it works when you call it again is that it 
creates a new vector this time, now with
the new Section. So, to do it this way, don't set this flag at the beginning. 
You have to setup the GlobalToNatural() afterwards.

Also, this shows that I should probably invalidate the global/local vector 
cache after a new Section is set.

  Thanks,

    Matt

Regards,
Blaise


--
Department of Mathematics and Center for Computation & Technology
Louisiana State University, Baton Rouge, LA 70803, USA
Tel. +1 (225) 578 1612, Fax  +1 (225) 578 4276 http://www.math.lsu.edu/~bourdin









--
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/>

--
Department of Mathematics and Center for Computation & Technology
Louisiana State University, Baton Rouge, LA 70803, USA
Tel. +1 (225) 578 1612, Fax  +1 (225) 578 4276 http://www.math.lsu.edu/~bourdin







Reply via email to