• Please visit and share your knowledge at our sister communities:
  • If you have not, please join our official Homebrewing Facebook Group!

    Homebrewing Facebook Group

A thought experiment to test the general validity of available mash pH software

Homebrew Talk

Help Support Homebrew Talk:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.
After considering some of the information from yesterday and crunching some numbers, I have the following comments/questions:

1.) Is it practical to think you can keep mineral dosing constant? Like I said yesterday, there are minerals tied to Ca that are desirable and as you increase or decrease volume, you'll want to increase or decrease these Ca minerals (CaCl, CaSO4, etc.) accordingly.

2.) Is it practical to think you can keep grain weight constant? Increasing or decreasing volume will affect gravity in a major way.

Yes, and this is indeed a radical development.

Given these 2 comments, is this new information really that radical or groundbreaking?
 
Last edited:
Adding (for but one example among many) 3.5 grams of CaCl2 to the strike water of a batch of German Pilsner with a 9-10 lb. grist, and 7 grams of CaCl2 to a similar batch of German Pilsner sans with an 18-20 lb. grist would be my idea of keeping mineral dosing relatively constant with respect to grist weight as well as flavor profile. But likely most are in essence doing something along these lines already, as for in this example one is most likely transitioning from a 5.5 gal. batch to an 11 gal. batch.

Where the change would be more radical would be the following: Instead of keeping the strike water mineralization at 3.5 grams of CaCl2 for both a Pilsner with a 9.5 lb. grist weight and a Wee Heavy Scotch Ale with a 19 lb. grist weight simply because one intends to brew both using 5 gallons of mash water and is also trying to maintain an "ideal" of ~50 ppm of Ca++ in the mash, the critical change based upon my thinking would call for the Wee Heavy to instead receive 7 grams of CaCl2 in keeping with its twice as heavy grist, even if both batches are intended to be 5.5 gallons.
 
Last edited:
Its time for me to take a sanity check. We have covered a lot of great information since @Silver_Is_Money started this thread.

Scenario #1: the recipe has 12.5 pounds of Pilsner malt mashed in 10 gallons of RO water. And to reach 5.4 pH it takes 4.362ml of lactic acid using no salts or minerals.

Scenario #2: the recipe has 25.0 pounds of Pilsner malt mashed in 10 gallons of RO water. And to reach 5.4 pH it takes 8.714ml of lactic acid using no salts or minerals.

Scenario #3: 20 pounds of Pilsner(2L), 1 pound of Vienna(4L) malt mashed in 12 gallons of RO water treated with 2g(CaCl2) and 3g(MgSO4).

The pH prediction results of the calculators tested are as follows:

lactic acid = 6.65ml Mash pH = 5.38 [Mash Made Easy v1.50]
lactic acid = 6.65ml Mash pH = 5.38 [Bru'n Water v118]
lactic acid = 6.65ml Mash pH = 5.43 [ezRecipe v1.21]
lactic acid = 6.65ml Mash pH = 5.47 [EZ Watercalculator v3.0.2]
lactic acid = 6.65ml Mash pH = 5.50 [MpH Water Calculator v3.0]

I would have to conclude based on my testing that both Scenario #1 and #2 are extreme examples. At the end of the day all of the water calculators do a very good job at estimating the pH of a real-world recipe as shown in Scenario #3.
 
Last edited:
Adding (for but one example among many) 3.5 grams of CaCl2 to the strike water of a batch of German Pilsner with a 9-10 lb. grist, and 7 grams of CaCl2 to a similar batch of German Pilsner sans with an 18-20 lb. grist would be my idea of keeping mineral dosing relatively constant with respect to grist weight as well as flavor profile. But likely most are in essence doing something along these lines already, as for in this example one is most likely transitioning from a 5.5 gal. batch to an 11 gal. batch.

Where the change would be more radical would be that instead of keeping the strike water level at 3.5 grams for both a Pilsner with a 9.5 lb. grist weight and a Wee Heavy Scotch Ale with a 19 lb. grist weight simply because one intends to brew both using 5 gallons of mash water and is also trying to maintain an "ideal" of ~50 ppm of Ca++ in the mash. Here the change based upon my thinking would call for the Wee Heavy to instead receive 7 grams of CaCl2 in keeping with its twice as heavy grist, even if both batches are intended to be 5.5 gallons.

Here is some analysis I just ran with regards to minerals:

Capture.JPG


Background:

1.) For volume I used 5, 10, 15, and 20 gallons for fermenter volumes;
2.) For losses, I started with 4l kettles losses, 8% boil-off, and 2l mash tun deadspace. I maintained 8% boil-off in all cases and varied the kettle losses and deadspace losses by 25% each time to account for theoretical change in kettle size. Not perfect, but consistent;
3.) I varied both grain weight and CaCl amount to try and keep gravity and mineral concentrations constant for all examples.

Here is some analysis I just ran with regards to acids:
Capture.JPG


Background:

1.) For volume I used 5, 10, 15, and 20 gallons for fermenter volumes;
2.) For losses, I started with 4l kettles losses, 8% boil-off, and 2l mash tun deadspace. I maintained 8% boil-off in all cases and varied the kettle losses and deadspace losses by 25% each time to account for theoretical change in kettle size. Not perfect, but consistent;
3.) I varied both grain weight and Lactic Acid amount to maintain pH.


DI pH was kept constant at 5.75 for all cases.
 
Last edited:
Using (the now antiquated) version 1.50 of Mash Made Easy I get the following for scenario #3:

1) 2L Pilsner Malt set to a selection of "North American 2-Row" (Di_pH = 5.66): 6.14 mL for 5.40 pH
2) 2L Pilsner Malt set to a selection of "Pale or Pale Ale" (DI_pH =5.71): 7.25 mL for 5.40 pH
3) 2L Pilsner Malt set to a selection of "North American Pilsner" (Di_pH = 5.75): 8.35 mL for 5.40 pH
4) 2L Pilsner Malt set to a selection of "European Pilsner" (Di_pH = 5.80): 9.60 mL for 5.40 pH

And for a target of 5.38 pH while the 2L Pilsner is set to "North American 2-Row" I do match your 6.65 mL
 
ScrewyBrewer: One must be willing to admit that quite often one man's extreme is another mans normal.

And its logical to assume that if the software yields sensible values for the wildest extremes, it should do likewise for the more traditional norms. And as A.J. said somewhere within this thread, in reference to the outlier giving reasonable values only for certain more potentially mainstream scenarios: "Even a broken clock is right twice a day". (or once a day if using 24 hour time rather than 12 hour time).
 
After reviewing Kai’s sheet, I think I’m goi g to try and remove the volume dependent pH Δ from my modded MpH sheet.

However, at this time, I dont see any reason to entertain changing the way I dose my minerals based on the recent conversations here.

Good conversation though.
 
ScrewyBrewer: One must be willing to admit that quite often one man's extreme is another mans normal.

And its logical to assume that if the software yields sensible values for the wildest extremes, it should do likewise for the more traditional norms. And as A.J. said somewhere within this thread, in reference to the outlier giving reasonable values only for certain more potentially mainstream scenarios: "Even a broken clock is right twice a day". (or once a day if using 24 hour time rather than 12 hour time).
@Silver_Is_Money conversely the same can be said about scenarios #1 and #2. They are the true outliers in regard to brewing in the real world. I've learned more than I thought I could this past week and for that I am grateful.
 
After reviewing Kai’s sheet, I think I’m goi g to try and remove the volume dependent pH Δ from my modded MpH sheet.
Don't lose sight of the fact that if the water has appreciable alkalinity it is a much stronger base than DI water so that if more water is added to the same volume of malt a larger proportion of protons contributed by acid will go to the water than they will with DI and there will be a noticeable pH shift or, at the same pH, a requirement for more acid.

Follow the protons!
 
Don't lose sight of the fact that if the water has appreciable alkalinity it is a much stronger base than DI water so that if more water is added to the same volume of malt a larger proportion of protons contributed by acid will go to the water than they will with DI and there will be a noticeable pH shift or, at the same pH, a requirement for more acid.

Follow the protons!

I think what I was trying to say was that, given what we talked about yesterday, that there is a small error introduced in the dosing of minerals by having it tied to the volume. You seemed to show that the pH shift from the Calcium and Magnesium salts stays constant for changing volume. Is this correct? This seems like an easy fix to remove a small error.

One of the reasons I adopted the Riffe MpH sheet was due to the separate calculations of all the different pH values. It does Grist pH, mixed source pH and then Mash pH so the different pH shift are separate from one another.
 
I want to take a crack at a summary of concepts:

1.) We seem to have arrived at a consensus about the 2x relationship, i.e. if we double the volume of zero alkalinity water in a fixed grist, we should not see a doubling in the required acid. However, if we double the grist in a fixed amount of zero alakalinity water,we should see a doubling in the required acid. Any sheet that shows different is in error. Agreed?

2.) After reviewing both Kaiser Water 1.58 and seeing the solver results from AJs excel troubleshooting engine, it seems that we should expect no change in the Δ pH for a fixed amount of CaCl (and by extension any other Ca or Mg salts) and fixed (I’ll explain this emphasis added in a minute) grist weight in varying amounts of zero alkalinity water. If we see a change in the Δ pH in this scenario, we may be introducing a small amount of error that could otherwise be eliminated. Agreed?

3.) I think we can agree that the difference between fixed and constant in this scenario. In 2.) we refer to fixed as a number that is not changing, where as in post #184 and in Larry’s post just above that we refer to constant as mineral or grain amounts that are changing proportionally to keep pH constant, i.e. changing grist weight and mineral amount to keep the same mineral concentrations and gravity.

4.) I’d say my only point of contention in this discussion is that there is some sort of new paradigm for dosing minerals. On the contrary, I don’t think any of this changes how I’ll dose minerals at all.
 
I think what I was trying to say was that, given what we talked about yesterday, that there is a small error introduced in the dosing of minerals by having it tied to the volume. You seemed to show that the pH shift from the Calcium and Magnesium salts stays constant for changing volume. Is this correct?
In the case of DI water, almost. In the case of alkaline water, no. The protons from the reaction of phytin and Ca/Mg will divide themselves between the various grist components in the same way as the protons from added acid, that is in accordance with how alkaline the receiving components are. DI water has almost 0 alkalinity and so you can add a whole lot of that and not have the pH shift much at all. OTOH water of alkalinity 1 or 2 mEq/L is much more alkaline than DI water and so absorbs more protons than DI water and adding such water does result in a noticeable shift.

One of the reasons I adopted the Riffe MpH sheet was due to the separate calculations of all the different pH values. It does Grist pH, mixed source pH and then Mash pH so the different pH shift are separate from one another.
The problem with that approach is that the different shifts are not independent. That is, the shift for grain depends on the alkalinity of the water and the added acid or base if they are weak. Yes, the proton deficits (charge changes) can be expressed as a sum of separate components each of them (except in the case of strong acids) a function of pHz but the solution to the charge equation is a complex function of the alkalinity of the water, the amount of acid or base added, all the malt masses, pHDI's, slopes, second and third order terms, and pKs of the added acids and bases. Were I to do the algebra necessary to write it all out it would be a real mess. There is, thus, no way I know of to separate it into a sum of individual pH shifts. Thus I'm pretty sure that, as I said somewhere else in this thread, that many of these programs use a mixture of science (knowledge that adding something acidic ought to somehow lower pH and something acid ought to raise it) and empiricism (Kolbach's observation that a change of 1 dH in residual alkalinity appears to result in a shift of wort (not mash) pH by a certain amout) to cobble up a pH shift number that is a reasonable approximation to what happens in the real world under some conditions. Thus Bru'n water, though as we have demonstrated here, has programmed into it a major departure from what a fundamental understanding of the chemistry dictates, gives reasonable answers when the mash thickness is 'reasonable'. The problem being that BIB guys don't use 'reasonable' mash thickness. This could, of course, be overcome by testing for mash thickness and changing some tweak parameter according to the entered value for mash thickness.
 
....1.) We seem to have arrived at a consensus about the 2x relationship, i.e. if we double the volume of zero alkalinity water in a fixed grist, we should not see a doubling in the required acid. However, if we double the grist in a fixed amount of zero alakalinity water,we should see a doubling in the required acid. Any sheet that shows different is in error. Agreed?
Agreed. But I've never brewed a style of beer using zero alkalinity water in the mash. The closest I've ever come to that was for a Kolschbier recipe (aka: Scenario #3). Even then once a few grams of CaCl2 and MgSO4 were added to the strike water @RPIScotty point #1 no longer applies. Agreed?
 
1.) We seem to have arrived at a consensus about the 2x relationship, i.e. if we double the volume of zero alkalinity water in a fixed grist, we should not see a doubling in the required acid. However, if we double the grist in a fixed amount of zero alakalinity water,we should see a doubling in the required acid. Any sheet that shows different is in error. Agreed?
A quark chaser like me would point out that there is no such thing as 0 alkalinity water but note that the alkalinity of pure water at mash pH is so low that the increase in acid required to acomodate a doubled mash water volume is negligable. Because of finite alkalinity of even pure water, doubling the grain will require negligably less that twice the acid (becuase we haven't doubled the water's acid requirement).

2.) After reviewing both Kaiser Water 1.58 and seeing the solver results from AJs excel troubleshooting engine, it seems that we should expect no change in the Δ pH for a fixed amount of CaCl (and by extension any other Ca or Mg salts) and fixed (I’ll explain this emphasis added in a minute) grist weight in varying amounts of zero alkalinity water. If we see a change in the Δ pH in this scenario, we may be introducing a small amount of error that could otherwise be eliminated. Agreed?
If we agree that the amount of H+ produced by a given calcium addition depends only on the amount of calcium (i.e. that organic phosphate is always in excess, which of course, it wouldn't be in a thin enough mash but most probably is in any mash, including no-sparge, BIAB etc, that we'd ever encounter and that there is no other effect related to concentration, which, of course, there would be in a thin enough mash but probably not any mash we would ever encounter then, for 0 alkalinity water, the statement is true. Again, there is no such thing as 0 alkalinity water and again even pure water has such small alkalinity that the statement is, for practical purposes, essentially true.
 
I guess my question then is this (and really the last sticking point for me as I try to understand all we've talked about): for my comment 2.) above, is it worth eliminating the error caused by this scenario?

We discussed yesterday that Kaiser Water and your troubleshooter sheet show that there is a negligible change in pH shift in the scenario where we hold CaCl to a fixed amount but vary the water. Obviously this scenario isn't very realistic but it shows that some programs introduced a less than negligible pH shift.

Is this worth eliminating?
 
I guess my question then is this (and really the last sticking point for me as I try to understand all we've talked about): for my comment 2.) above, is it worth eliminating the error caused by this scenario?

We discussed yesterday that Kaiser Water and your troubleshooter sheet show that there is a negligible change in pH shift in the scenario where we hold CaCl to a fixed amount but vary the water. Obviously this scenario isn't very realistic but it shows that some programs introduced a less than negligible pH shift.

Is this worth eliminating?
Logically no. It seems to me you've answered your own question. Why recode to solve for a negligible pH change only surfaced in an unrealistic brewing scenario. Unless of course you want to take on the challenge.
 
I'm trying hard to keep an open mind here. @Silver_Is_Money can you define what constitutes 'merely negligible' in a real world brewing situation?

Not really, but if it induces an error on the order of 3% or more, perhaps that is where it stops being negligible. A.J. considered a 2.1% error sufficient cause to apply a fix earlier in this thread.
 
I've noted in some posts here that in some of the spread sheets RA is used to estimate mash pH or mash pH shift, Martin has stated plainly that he uses RA and, though I tried to convince him otherwise, John Palmer thinks RA is the way to go to the point where he told me he wanted to make it the central theme of his book. So I thought I'd see if RA really has a place here. From a purely empirical point of view of course it does. If we have water with bicarbonate in it (alkaline water) and add a bunch of calcium and malt we know that the calcium will react with the phytin to produce acid which, clearly, will neutralize some of the bicarbonate thus reducing the effective alkalinity. The alkalinity not removed by the H+ ions from this reaction is 'residual'. It was Kolbach's intent to present a measure which could be used to compare source waters. Roughly speaking, a water with twice the residual alkalinity of another water would require twice the acid to treat the water as would be required to treat the other water.

As stated several times throughout the thread in order to predict mash pH or determine the amount of acid (or base) required to set a desired mash pH we must solve

-∑_i Vi*ci*Qai(pHz) + ∑_i (mi/gi)*Qbi(pHz) + Vw*Ct*(Qc(pHz) - Qc(pHs)) + Vw*(Qw(pHz) - Qw(pHs) + Vw*H/3.5 + ∑_i mi*(ai*(pHz - pHDi) + bi*(pHz - pHDi)^2+ci*(pHz - pHDi)^3) = 0

for either pHz or one of the acid (Vj representing the volume of an acid of molar strength gi) or base terms (mj representing the mass of a solid base with molecular weight gi) depending on whether we are estimating or setting pHz. Ct is the total carbo per liter of mash water (volume Vw), pHs is that water's pH, mi are the masses of the individual malts, ai, bu and ci are their coefficients and pHDi their DI mash pH's. Now this equation does not contain RA but it contains something like it. Kolbach defined RA as simply

RA = alk - ([Ca++]/3.5 + [Mg++]/7) in which alk is the water's alkalinity (in mEq/L) and the bracketed quantities the hardnesses in mEq/L. To simplify

RA = alk -H/3.5 in which H = [Ca++] + [Mg++]/2

Though Kolbach probably never intended it most spreadsheet authors deduct the amount of acid they have added from Kolbach's RA and call that the RA

RA = alk -H/3.5 -∑_i Vi*ci*Qai(pHz)

Most spreadsheet authors are unaware (or choose to ingnore because it doesn't make a great difference) that the number of protons supplied by lactic and phosphoric acids depends on pHz so for them the amount of acid added is sumply the number of mmol of it and if we do that too then ∑_i Vi*ci*Qai(pHz) = ∑_i Vi*ci as Qai(pHz) is presumed to be 1. For further simplicity lets assume that there is only one acid so that we can represent the sum by just A, the number of millimoles of acid. Then

RA = alk -H/3.5 - A/Vw

with A divided by Vw as RA is per liter. Then

Vw*RA = Vw*alk - Vw*H/3.5 - A

represents the proton deficit of the mixture of mash water and added acid. The sum of the terms in the charge equation that represent these components is

Vw*Ct*(Qc(pHz) - Qc(pHs)) + Vw*(Qw(pHz) - Qw(pHs) + Vw*H/3.5 - A

Dividing through by Vw puts us on a per liter basis:

Ct*(Qc(pHz) - Qc(pHs)) +(Qw(pHz) - Qw(pHs) + H/3.5 - A/Vw

From this it is clear that if Ct*(Qc(pHz) - Qc(pHs)) +(Qw(pHz) - Qw(pHs) = alk then we could just substitute RA for it in the main equation. This would be great if we could get away with it because then, by ignoring bi and ci malt terms we would have

RA + ∑_i mi*(ai*(pHz - pHDi)) = 0 which is linear in pHz

RA + pHz*∑_i mi*ai - ∑_i mi*ai*pHDi = 0

and

pHz = (∑_i mi*ai*pHDi - RA)/∑_i mi*ai

This is, I believe, what many of the spreadsheets try to do. Note that it even separates pHz into a sum of terms: one due to the malt and one due to the mash water. Of course it isn't going to work that well because we have ignored the non linearities in the malts and in the proton deficit from water alkalinity and ignored the fact that added acids don't actually donate 1 mEq of protons per mmol. So what do we do? We tweak the last formula to make things fit observed data better. I think the popular programs do this by comparison with reported errors from their users or beta testers. Given that with base malts the pH differences between pHDi and pHz are not that large ignoring their non linearities isn't going to cause that much error. With the colored malts (pHz - pHDi) will be larger but as these malts are used in quantity small relative to the base malt quantity perhaps the errors aren't that great but we have noted over the years that when HBTers report the wilder pH variations from Bru'n water the beer in question is often a dark one.

While Ct*(Qc(pHz) - Qc(pHs)) +(Qw(pHz) - Qw(pHs) ≠ alk there is a definite relationship between them. Ct is calculated from alk and pHs, the water's source pH. In fact

Ct*(Qc(pHz) - Qc(pHs)) +(Qw(pHz) - Qw(pHs) = f* alk

where f is a factor, usually around 0.9, that gives the proton deficit of the water/calcium/acid mix (still ignoring the dependence of acid strength on pHz) in terms of the alkalinity. Users of the RA based method will improve their pHz estimates if the use RA = f*alk -H/3.5 - A/Vw in computing RA with the catch being, of course, that f is a function of pHz and pHs. A couple of iterations will resolve that, of course, but the whole idea of forcing linearity is to dodge the recursion bullet. Values of f are found on the following graph:
ratios.jpg

A spreadsheet author could declare that the average brewer would be shooting for pH 5.4 and would have mash water of pH 7.5 and use 0.88 tweaking this in response to observed error reports. An important conclusion is that if your spreadsheet doesn't ask you for the source water's pH and especially if it asks for or prefers bicarbonate to alkalinity (forces you to convert an alkalinity report to a bicarbonate value before entering) be wary.
 
Not really, but if it induces an error on the order of 3% or more, perhaps that is where it stops being negligible. A.J. considered a 2.1% error sufficient cause to apply a fix earlier in this thread.
After applying changes to MME v1.65 have pH predictions improved by 2-3% on real-world recipes?
 
After applying changes to MME v1.65 have pH predictions improved by 2-3% on real-world recipes?

Well, with all of the coding and watching this thread I've been doing for the past few days I haven't brewed any batches to find out. Plus they would take at least a couple weeks anyway....

Along with patching the current Mash Made Easy series (in the version 1.XX range) I've also been hard at work on Version 2.00, which effectively has had a completely new engine installed, and which will stamp out major issues that have developed in 1.XX as I've been modifying it, whereby somewhere along the line its results turned BAD for darker brews, and really BAD for really dark brews. I've made a number of major changes to 2.00, but the biggest is that all calculations involving pH are now based on Log Base 10, seeing as the pH scale itself is a Log Base 10 system. The differences don't show up for lighter colored brews, but kick in "exponentially" as brews become darker in color. I recall where Martin discovered something along the lines of what I was seeing, and which motivated him to come out with a revision to correct for this about a year of two ago, when he discovered that the really dark malts have way more acidity than he had originally anticipated, so back then I should have realized the same, but I'm old and slow. Kicking the tires on 2.00 now. Stay tuned. After this one is released, and it may be later today (???), I think I'll need a vacation from spreadsheet coding in order to unwind. I've tossed everything including the kitchen sink into 2.00, and I believe it will stand for awhle before needing revision.

One thing I discovered just last night as I was looking through my Briess DI_pH data, and which is another one that may rock the house, is that the deeply roasted grains which are not malted (such as roasted barley, in any of its Lovibond colors) are far less acidic than the dark roasted/malted barleys (which can get down right acidic by comparison to the darkest of the non malted grains). So version 2.00 will do away with "Deep Roasted" and replace this class with "Roasted Barley" and "Roasted Malt". The two classes are simply too far apart to keep together in a single class.
 
Last edited:
I've noted in some posts here that in some of the spread sheets RA is used to estimate mash pH or mash pH shift, Martin has stated plainly that he uses RA and, though I tried to convince him otherwise, John Palmer thinks RA is the way to go to the point where he told me he wanted to make it the central theme of his book. So I thought I'd see if RA really has a place here. From a purely empirical point of view of course it does. If we have water with bicarbonate in it (alkaline water) and add a bunch of calcium and malt we know that the calcium will react with the phytin to produce acid which, clearly, will neutralize some of the bicarbonate thus reducing the effective alkalinity. The alkalinity not removed by the H+ ions from this reaction is 'residual'. It was Kolbach's intent to present a measure which could be used to compare source waters. Roughly speaking, a water with twice the residual alkalinity of another water would require twice the acid to treat the water as would be required to treat the other water.

As stated several times throughout the thread in order to predict mash pH or determine the amount of acid (or base) required to set a desired mash pH we must solve

-∑_i Vi*ci*Qai(pHz) + ∑_i (mi/gi)*Qbi(pHz) + Vw*Ct*(Qc(pHz) - Qc(pHs)) + Vw*(Qw(pHz) - Qw(pHs) + Vw*H/3.5 + ∑_i mi*(ai*(pHz - pHDi) + bi*(pHz - pHDi)^2+ci*(pHz - pHDi)^3) = 0

for either pHz or one of the acid (Vj representing the volume of an acid of molar strength gi) or base terms (mj representing the mass of a solid base with molecular weight gi) depending on whether we are estimating or setting pHz. Ct is the total carbo per liter of mash water (volume Vw), pHs is that water's pH, mi are the masses of the individual malts, ai, bu and ci are their coefficients and pHDi their DI mash pH's. Now this equation does not contain RA but it contains something like it. Kolbach defined RA as simply

RA = alk - ([Ca++]/3.5 + [Mg++]/7) in which alk is the water's alkalinity (in mEq/L) and the bracketed quantities the hardnesses in mEq/L. To simplify

RA = alk -H/3.5 in which H = [Ca++] + [Mg++]/2

Though Kolbach probably never intended it most spreadsheet authors deduct the amount of acid they have added from Kolbach's RA and call that the RA

RA = alk -H/3.5 -∑_i Vi*ci*Qai(pHz)

Most spreadsheet authors are unaware (or choose to ingnore because it doesn't make a great difference) that the number of protons supplied by lactic and phosphoric acids depends on pHz so for them the amount of acid added is sumply the number of mmol of it and if we do that too then ∑_i Vi*ci*Qai(pHz) = ∑_i Vi*ci as Qai(pHz) is presumed to be 1. For further simplicity lets assume that there is only one acid so that we can represent the sum by just A, the number of millimoles of acid. Then

RA = alk -H/3.5 - A/Vw

with A divided by Vw as RA is per liter. Then

Vw*RA = Vw*alk - Vw*H/3.5 - A

represents the proton deficit of the mixture of mash water and added acid. The sum of the terms in the charge equation that represent these components is

Vw*Ct*(Qc(pHz) - Qc(pHs)) + Vw*(Qw(pHz) - Qw(pHs) + Vw*H/3.5 - A

Dividing through by Vw puts us on a per liter basis:

Ct*(Qc(pHz) - Qc(pHs)) +(Qw(pHz) - Qw(pHs) + H/3.5 - A/Vw

From this it is clear that if Ct*(Qc(pHz) - Qc(pHs)) +(Qw(pHz) - Qw(pHs) = alk then we could just substitute RA for it in the main equation. This would be great if we could get away with it because then, by ignoring bi and ci malt terms we would have

RA + ∑_i mi*(ai*(pHz - pHDi)) = 0 which is linear in pHz

RA + pHz*∑_i mi*ai - ∑_i mi*ai*pHDi = 0

and

pHz = (∑_i mi*ai*pHDi - RA)/∑_i mi*ai

This is, I believe, what many of the spreadsheets try to do. Note that it even separates pHz into a sum of terms: one due to the malt and one due to the mash water. Of course it isn't going to work that well because we have ignored the non linearities in the malts and in the proton deficit from water alkalinity and ignored the fact that added acids don't actually donate 1 mEq of protons per mmol. So what do we do? We tweak the last formula to make things fit observed data better. I think the popular programs do this by comparison with reported errors from their users or beta testers. Given that with base malts the pH differences between pHDi and pHz are not that large ignoring their non linearities isn't going to cause that much error. With the colored malts (pHz - pHDi) will be larger but as these malts are used in quantity small relative to the base malt quantity perhaps the errors aren't that great but we have noted over the years that when HBTers report the wilder pH variations from Bru'n water the beer in question is often a dark one.

While Ct*(Qc(pHz) - Qc(pHs)) +(Qw(pHz) - Qw(pHs) ≠ alk there is a definite relationship between them. Ct is calculated from alk and pHs, the water's source pH. In fact

Ct*(Qc(pHz) - Qc(pHs)) +(Qw(pHz) - Qw(pHs) = f* alk

where f is a factor, usually around 0.9, that gives the proton deficit of the water/calcium/acid mix (still ignoring the dependence of acid strength on pHz) in terms of the alkalinity. Users of the RA based method will improve their pHz estimates if the use RA = f*alk -H/3.5 - A/Vw in computing RA with the catch being, of course, that f is a function of pHz and pHs. A couple of iterations will resolve that, of course, but the whole idea of forcing linearity is to dodge the recursion bullet. Values of f are found on the following graph:
View attachment 578805
A spreadsheet author could declare that the average brewer would be shooting for pH 5.4 and would have mash water of pH 7.5 and use 0.88 tweaking this in response to observed error reports. An important conclusion is that if your spreadsheet doesn't ask you for the source water's pH and especially if it asks for or prefers bicarbonate to alkalinity (forces you to convert an alkalinity report to a bicarbonate value before entering) be wary.

AJ,

One question and one comment:

Pardon my ignorance but what is the Q value?

I copied your troubleshooter code from here into an excel sheet and I think I want to take a crack at figuring out the code and making a sheet that is a middle ground between it and the more common color based sheets. Research, research, research...
 
I've been taking A.J.'s Q values to be mEq's. But I will defer to his confirmation (or denial, or correction) of this assumption on my part.

Edit: If you zero out the lactic acid addition field and then divide the resulting mEq's (delta total Q) which pop up in column 77 by A.J.'s value of ~13 mEq's/mL for 88% lactic acid, you get the same mL's answer as the one you just zeroed out. This should confirm that the Q's are mEq's.
 
Last edited:
Yes, the Q values are charges and measured in mEq, or mEq/L

As for what is an acceptable level of approximation error my feeling is that the answer is "none" if you can eliminate it. Some errors you can't and we're stuck with those. But the point of the spread sheet is to illustrate that many of them can be knocked out pretty simply. If you've taken care of these you don't have to worry about how big you can let them become.

BTW I love the idea of calling the spreadsheet a 'trouble shooter'. I think of it as a voltmeter for water calculators.
 
Last edited:
Yes, the Q values are charges and measured in mEq/L

As for what is an acceptable level of approximation error my feeling is that the answer is "none" if you can eliminate it. Some errors you can't and we're stuck with those. But the point of the spread sheet is to illustrate that many of them can be knocked out pretty simply. If you've taken care of these you don't have to worry about how big you can let them become.

BTW I love the idea of calling the spreadsheet a 'trouble shooter'. I think of it as a voltmeter for water calculators.

When I graduated from college at the ripe age of 29 in 2014, I went to work for Nine Mile Point nuclear station in Oswego as an electrical design engineer. Most of the work I did was troubleshooting: electromechanical relays, breakers, etc.

It's a term I love to apply to homebrewing because I think much of what you do when you have a more scientific approach in brewing is troubleshooting.
 
BTW I love the idea of calling the spreadsheet a 'trouble shooter'. I think of it as a voltmeter for water calculators.

So I was inspired to play around with the engine behind AJ's troubleshooter. I reformatted it in order to get a better understanding about how it worked and in the process added a few creature comforts of my own:

https://drive.google.com/open?id=15EJcCWYXTcm_4B_w9AOUAFRLpybT--kC

Capture.JPG


What I wanted to do was modify it to be able to compare to my own modded MpH sheet with the results from his troubleshooter, which i am coming to trust as very reliable.

Essentially I modified my own sheet with a separate reference cell to calculate the Mash pH with salts using the pH shift method and mEq. It's found here:

https://drive.google.com/open?id=1dPLKibGRMSw0tHJTJfazcHvgUzuRZ_K1

Capture.JPG


I set up the two sheets with as close to identical settings as I could. I used 1.7 L malt in my sheet and 5.75 pH DI in both. CaCl, CaSO4, and MgSO4 as well as lactic acid amounts were kept the same. I then used the solver to zero out Qtotal by varying the target pH, i.e. matching the Mash pH (Acids) values for both sheets. The results are as follows:

deLange - 5.5873
Modded MpH (stock mEq/l pH calc) - 5.5604 (-0.0269)
Modded MpH (revised mEq pH shift) - 5.5836 (-0.0037)

Pretty cool!
 
Last edited:
Back
Top