This is really just a suggestion, but I spent a while trying to understand the use of the rock_id keyword in lith2.run_one_step(). While it may seem repetitive, I think it will help the reader to follow if you add comments before the run_one_step() calls in Part 3. Of course, I had read in the text above that you were doing this because LinearDiffuser() may deposit material. But, by the time I got down to the code I had forgotten this and spent about 15 min in the docs sorting it out (then ultimately remembering I had seen that above). I think it will save folks a bit of time if you: 1) make an explicit statement in the text at the start of part 3 that you have to use rock_id in run_one_step any time material is deposited. 2) Insert comments above the three calls to run_one_step that remind the reader why that parameter is there, as well as why it is changing from 0 to 1 to 0. In general, clarity would probably be improved by scattering more comments throughout the tutorial code.
This is really just a suggestion, but I spent a while trying to understand the use of the rock_id keyword in lith2.run_one_step(). While it may seem repetitive, I think it will help the reader to follow if you add comments before the run_one_step() calls in Part 3. Of course, I had read in the text above that you were doing this because LinearDiffuser() may deposit material. But, by the time I got down to the code I had forgotten this and spent about 15 min in the docs sorting it out (then ultimately remembering I had seen that above). I think it will save folks a bit of time if you: 1) make an explicit statement in the text at the start of part 3 that you have to use rock_id in run_one_step any time material is deposited. 2) Insert comments above the three calls to run_one_step that remind the reader why that parameter is there, as well as why it is changing from 0 to 1 to 0. In general, clarity would probably be improved by scattering more comments throughout the tutorial code.