Now, having repeatedly read through the sticky on HBT, and being unmotivated to go through all the process laid out, and my head set spinning by AJ's raw code for Excel... I have no idea how to determine a specific a1 or mash buffering.
Well, the great thing about having worked through the original raw code A.J. posted with him was that he then developed a set of callable VBA functions that I then modified for the current troubleshooter. It really is very simple to use and does what you are doing but likely a bit faster.
Short of titrating the malt, which is the method for determining the co-efficients, you can guess. If you take a look at my sheet, you'll there are 10 "Custom Malt Parameters" slots in the Malt Type Database. I added 2 new cells and I will upload the revision to the main site shortly:
1.) Total Mash Buffering (mEq/Δ pH)
2.) Total Mash Buffering (mEq/Δ pH/kg)
I believe the second value is what you have been targeting.
For RO/DI water, which it seems like you are using, I think it's safe to assume that
Total Mash Buffering (mEq/Δ pH/kg) = a1 insofar as the values you are predicting are close to what you are measuring.
I really appreciate your help.
No problem. A.J. was very patient with me when some of the threads came about last year and I think he was happy to finally have someone who understood and could "pretty" things up for public consumption.
The biggest hurdle is really malt modelling. The model is simple:
dQmalt (mEq/kg) = a1 * (pHz - pH DI) + a2 * (pHz - pH DI) ^ 2 + a3 * (pHz - pH DI) ^ 3
The issue is getting a1, a2, and a3 but the savvy homebrewer can tweak the inputs in my sheet to get decent data after a few batches with the same malt.
I would suggest tweaking for base malts and using my stock values for specialty malts.
Ultimately, the concept of charge conservation/proton deficit is that all the Q values of the contributors (QTotal) need to be zero'd out by a value of pHz (mash pH estimate). Excel is our friend here. You can use the solver to tell the sheet specific values of acid, etc. or you can do like A.J. did (and that I adapted) and put code in that does it when you change a variable.
Either way, "following the protons" (as A.J. says) is a much better way than color proxies, etc. Also, by taking into account the pH dependence for things like acids, baking soda, lime, etc., you eliminate incremental errors that plague sheets that can't track pH dynamically.