<div dir="ltr"><div dir="ltr">Hi Jakub,<div><br></div><div>Sure thing, I won&#39;t make any changes to master of course. I&#39;ll look forward to hearing what Juan has to say on this topic, I am also by no means an expert here and happy to learn best approaches.</div><div><br></div><div>For the weights, I was speaking purely hypothetically as I don&#39;t know if I will be using the diagonal stiffness. That makes sense about the weights for the inner product being a totally different thing than the weights from the BDDC point of view, so as long as they are constructed to add up to one then you can use them to compute dot products of parallel vectors, since the redundant dofs will be weighted to add to one. This is all good and makes sense for the Krylov solvers.</div><div><br></div><div>Sorry again, but two last quick questions out of curiosity:</div><div>1. Why BiCGSTAB over GMRES? Would it be substantial to implement GMRES given what already exists, and/or would it provide any benefit?</div><div>2. From my understanding, the &quot;use_arithmetic_constraints&quot; add for each subdomain edge a single coarse constraint for the average of the fine dofs on that edge (is this correct?). If you wanted to add all edge dofs to the coarse space, so that you are actually imposing continuity at each edge dof separately, how would you do this? I would imagine the input to bddcml_setup_preconditioner would be a matrix of size n_edge_nodes x n_nodes where n_edge_nodes is the number of subdomain nodes lying on an edge. This matrix would just have a one in each row corresponding to the edge node. Is my understanding here correct? Obviously this would lead to a very large coarse space but just curious if I understand what is going on.</div><div><br></div><div>Thanks, and I&#39;ve already got most of the complex branch changes compiling so just need to test them out to see if I broke anything.</div><font color="#888888"><div><br></div><div>Sebastian</div></font></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jan 25, 2021 at 1:55 PM Jakub Sistek &lt;<a href="mailto:sistek@math.cas.cz">sistek@math.cas.cz</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    <div>Hi Sebastian,<br>
      <br>
      I have added you as a developer of BDDCML. Just do not push to the
      master, please. Another branch, say &quot;complex&quot;, is fine!<br>
      <br>
      I will add Juan Calvo into the discussion on Nedelec elements vs.
      BDDC(ML). He has studied these things. I have never worked with
      these elements too closely really, but would be happy to learn.<br>
      <br>
      I think that I now understand your question about the inner
      products and weights! It is a slight abuse of the concept of
      partition of unity. In DD methods, the weighting operator plays a
      crucial role and there is a number of strategies available like
      the diagonal stiffness etc. Do you actually plan to use the
      diagonal stiffness at this side?<br>
      <br>
      In the Krylov method, on the other hand, the operator is just
      reused to get the right outcome from the duplicated entries at the
      interface. There are multiple ways how to do this, but I decided
      to go for this weighted inner products to avoid the need to assign
      unknowns to processes in a unique way as this is not needed
      anywhere else in the code. However, ANY partition of unity would
      do this job without affecting the performance of the
      preconditioner. So, the simple weights by cardinality would help
      here just fine. If you plan to use the diagonal stiffness in the
      preconditioner, then we will perhaps need to use separate weights
      here, it is not a problem although we would need to think how to
      do that. Otherwise, you could just use the<br>
      wights_type = 0<br>
      straightaway.<br>
      Even if you needed the diagonal stiffness weights and thus the new
      partition of unity for inner products, that should be a rather
      simple thing to be done. I think I would not put the complex
      numbers as weights into these inner products.<br>
      <br>
      Let us keep in touch on this! I will contact the other developers
      to get their points of view and put you in the loop.<br>
      <br>
      Do not hesitate to ask! The code can be quite hard to read at many
      places so a quick question can be worth hours of decyphering the
      code. I am more than happy to help!<br>
      <br>
      Best wishes,<br>
      <br>
      Jakub<br></div>
    <br>
    <pre cols="72">-- 
Jakub Sistek, Ph.D.

Researcher
Institute of Mathematics
Czech Academy of Sciences

<a href="mailto:sistek@math.cas.cz" target="_blank">sistek@math.cas.cz</a>
<a href="http://www.math.cas.cz/~sistek" target="_blank">http://www.math.cas.cz/~sistek</a>
+420 222 090 710</pre>
  </div>

</blockquote></div></div>