<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>hi Matt,</p>
    <br>
    <div class="moz-cite-prefix">On 20/02/18 12:32, Matthew Knepley
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAMYG4GkA2GC9F+rMCknKEwiS3wv0oWBjLRznihThgie8UJ-aWw@mail.gmail.com">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">On Mon, Feb 19, 2018 at 4:33 PM,
            Adrian Croucher <span dir="ltr"><<a
                href="mailto:a.croucher@auckland.ac.nz" target="_blank"
                moz-do-not-send="true">a.croucher@auckland.ac.nz</a>></span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div text="#000000" bgcolor="#FFFFFF">
                <p>hi Matt</p>
                <p>I tried what you suggested and modified
                  DMPlexGetFieldType_Internal() so that all processes
                  have the same field type (ft):</p>
              </div>
            </blockquote>
            <div>Yep, this is going to take specifying in the interface
              that it is collective. It looks like it might be used as
              if it is not. <br>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    It looks to me like that may not be the problem, actually. I think I
    may have tracked it down though.<br>
    <br>
    In vec/vec/interface/rvector.c:1280, in VecGetSubVector():<br>
    <br>
    <tt>      if (n%bs || bs == 1) bs = -1; /* Do not decide block size
      if we do not have to */</tt><tt><br>
    </tt><tt><br>
    </tt>If there are no cells on one process (n = 0) then n%bs = 0, so
    if bs > 1 the reassignment bs = -1 doesn't happen.<br>
    <br>
    If I alter it to:<br>
    <br>
    <tt>      if (n%bs || bs == 1 || !n) bs = -1; /* Do not decide block
      size if we do not have to */</tt><tt><br>
    </tt><tt><br>
    </tt>then it also sets bs = -1 on the n = 0 process, and it works
    fine for my case.<br>
    <br>
    I'm not sure I fully understand the purpose of this line though, so
    don't know if what I've done is always going to be the right thing?<br>
    <br>
    I also wondered if it would be desirable to ensure bs is consistent
    across all processes, but am not sure what the right value would be
    in that case. I tried doing an MPI_allreduce() on bs, to find the
    minimum across processes (so if any were -1 then they all were) and
    that also worked for my case.<br>
    <br>
    - Adrian<br>
    <tt>
    </tt>
    <pre class="moz-signature" cols="72">-- 
Dr Adrian Croucher
Senior Research Fellow
Department of Engineering Science
University of Auckland, New Zealand
email: <a class="moz-txt-link-abbreviated" href="mailto:a.croucher@auckland.ac.nz">a.croucher@auckland.ac.nz</a>
tel: +64 (0)9 923 4611
</pre>
  </body>
</html>