My thoughts on general comments kind of got out of hand (as they often do) but here they are.
Adding (or subtracting) acid to a DI mash of a malt the amount required to establish a given pH is
mEq/kg = a*(pH - pHdi) + b*(pH - pHdi)^2 +...
where pHdi is the DI pH and a, b, c ... are coefficients which describe the buffering capacity:
d(mEq/kg)/dpH = a + 2*b*(pH - pHdi) + ...
A program which estimates mash pH clearly needs values of a, b and c for each malt in order to be able to determine the way in which exchange of protons shifts its pH. a, b, c and pHdi are obtained by taking measurements on the malts.
The relationship between malt, acid and pH is tied up in
mEq/kg = a*(pH - pHdi) + b*(pH - pHdi)^2 +...
and one way or another any program which wants to estimate mash pH must use that relationship. If the program does not have a, b, c, and pHdi it must obtain estimated values for them - all of them. Some maltsters specify the pH of a Congress mash in their product data sheets but by no means all. If we bought a whole bunch of malt samples and mashed them with DI water and measured the pH we might find some correlation between pHdi and, say, color or pHdi and malt type and of course this is what Kai did and so, based on his work, we can obtain an estimate of pHdi based on nothing more than the malt color. Is it a good estimate? No, but it is better than nothing at all and thousands of guys using it in popular spreadsheets have gotten adequate, if not spectacular, results.
So now on to a, b, and c. Where do we get numbers for those? One place to start might be Kolbach's observation that the pH of knockout wort shifts by 0.084 for each mEq/L change in residual alkalinity and apply that to mash. As a kg of malt is typically given 3 L of water in a mash that says that the mash buffering must be about -36 mEq/kg•pH. Many malts do in fact have buffering capacities near their DI mash pH's of about -36 mEq/kg•pH. But others do not. Could we do better if we made the DI mash and then added some acid to see how much the pH changed? Of course and Kai did that too getting data which, for each malt, gave the amount of pH shift per mEq added acid (or data at least from which they could be obtained). This was pioneering work (at least for home brewers) and so Kai should hardly be surprised that others building on what he did would find better ways to make the measurements. The major shortcomings of his method are that he did not recognize that b and c, while perhaps small for some malts and insignificant if we stay close to pHdi (which we do with base malts but not high colored malts) are not 0 and he did not allow for the fact that one must wait for 20 - 30 minutes before taking a pH measurement. Nevertheless his measurements are better than using the same 36 mEq/kg•pH for every malt.
Now that we have pHdi and a we have the model
mEq/kg = a*(pH - pHdi) = a*pH - a*pHdi
When we mix a bunch of malts some will add acid and some will absorb acid. It is clear that all the protons absorbed have to equal all the protons given up so that if the masses of the individual malts are m1, m2, m3...
a1*pH*m1 - a1*pHdi1*m1 + a2*pH*m2 - a2*pHdi2*m2 + a3*pH*m3 - a3*pHdi1*m3 = 0
This can clearly be solved for pH (as it is linear in pH) and so we have a way of prediciting mash pH from the a's and DI pH's of the malts in the case where there is no alkalinity to be dealt with. If alkalinity is present we can simply argue that in getting to mash pH we need an amount of acid that is nearly always pretty close to 90% of the alkalinity (in mEq/L) and solve
a1*pH*m1 - a1*pHdi1*m1 + a2*pH*m2 - a2*pHdi2*m2 + a3*pH*m3 - a3*pHdi1*m3 + 0.9*V*alk= 0
in which V is the volume of the water, for pH (there is one more term for phytin/calcium protons). This is what the current generation of spreadsheets have to do. The accuracy they are capable of achieving is limited by
1)The a's and and pHdi's are not those of the malts actually being mashed but rather estimates based on color (which isn't a very good basis for estimates) or similarity to measurements made on another malt which measurements were not as good as they could be
2)The malt model is linear and malts aren't. This results in error through a couple of mechanisms but for base malts these are small as pH and pHdi are close. In colored malts the errors are larger but it is tempting to think that as the the amounts of those malts are small in proportion to the base malts those larger errors might not be significant. We can't reason this problem away in this manner though because the volume of protons contributed by those dark malts is of comparable magnitude to the volume absorbed by the base malts. Better predictions are, thus, possible when dark malts are not used or when they are small contributors to proton supply.
3)The proton deficit is not fixed at 90% of the alkalinity. While an accurate model for water proton demand is not complicated it is a function of mash pH (dependence on mash pH is not linear), water supply pH, alkalinity and the end point pH used in determining the alkalinity. Consequently better predictions are possible if the mash liquor has no alkalinity.
The linear model is subject to the limitations discussed above. We can't really fix the linear model because the problem isn't linear. But it isn't a terrible model either. Thousands have used it for years. Can we improve it? Clearly if one puts a's and pHdi's into his spreadsheet that better models the actual malts he is using he should get better results than if he uses one's that don't match well. This is why if you know that your program always under estimates pH (too much acid) when you use a particular malt you can tweak it to give a higher pH answer either by increasing pHdi or decreasing a for that malt.
pH = (mEq/kg)/a + pHdi
By getting a closer match to Crisp Maris Otter using this approach you may be worsening the match for Muntons MO etc.
To get better answers you will have to go to the full up (non linear) model. The implications of this are
1)You will have to use iterative solution techniques to get pH estimates. This is actually easy enough to do in Excel using the Solver but that terrifies people for some reason. Palmer, for example, refused to even mention it in his book.
2)You have to get values not only for pHdi and a but for b and c as well and this really puts you back into the same boat of having to find someone who is going to do measurements. If you are a large operation that buys malts by the rail car or if we could ever convince the maltsters to include some data about there malts at other pH values this is worth considering. Otherwise, probably not.