Twentieth 20th Full Calculation

After several full calculation iterations, this particular calculation chain will settle into a stable state. For example:

<calcChain xmlns="…">
  <c r="B2" i="1"/>
  <c r="B3" s="1"/>
  <c r="B4" s="1"/>
  <c r="B5" s="1"/>
  <c r="B6" s="1"/>
  <c r="B7" s="1"/>
  <c r="B8" s="1"/>
  <c r="B9" s="1"/>
  <c r="B10" s="1"/>
  <c r="A2"/>
  <c r="A3" s="1"/>
  <c r="A4" s="1"/>
  <c r="A5" s="1"/>
  <c r="A6" s="1"/>
  <c r="A7" s="1"/>
  <c r="A8" s="1"/>
  <c r="A9" s="1"/>
  <c r="A10" s="1"/>
  <c r="C10" l="1"/>
  <c r="D10" s="1"/>
</calcChain>

The difference introduced here is the concept of a dependency-level attribute @l. This flag indicates that all chain and child chain concurrent calculation must be completed (and all cells will have newly calculated values) before proceeding with calculation.

In this example, cells C10 and D10 are marked to exist in a new and separate dependency level from the cells A2:A10 and B2:B10. This makes sense given how the dependencies for these formulas are set up: A2:A10 can be calculated concurrently with B2:B10 because they do not depend on each other. A2:A10 exists as one calculation chain, and B2:B10 exist as another parallel calculation chain. However, C10 and D10 are both dependent on calculated results from the two parallel chains, and so can only be calculated after the first set of parallel calculations are completed.

Dependency-Level @l flags indicate where calculation must wait for all concurrent threads to complete before continuing with calculation