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

    Homebrewing Facebook Group

Bru'n water help

Homebrew Talk

Help Support Homebrew Talk:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.
I recently brewed a batch where I assumed a 1.0 for the Acid Malt Strength modifier and came in low on pH. I played with the numbers and it turns out that an Acid Malt Strength modifier of 2.3 was required to match the pH I measured.
 
I recently brewed a batch where I assumed a 1.0 for the Acid Malt Strength modifier and came in low on pH. I played with the numbers and it turns out that an Acid Malt Strength modifier of 2.3 was required to match the pH I measured.

My BW copy kicks out with an "Invalid Value" error for any acidulated malt strength modifier factor selection of greater than 2.0.

Oddly enough, assuming first and foremost that I'm entering things correctly, in BW what I'm seeing is that as the weight of an exclusively low Lovibond Pilsner malt based grain bill is increased, the amount of acidulated malt required to achieve 5.4 pH in the mash needs to be reduced. That seems to me to be intuitively (if not also factually) incorrect. Shouldn't the addition of more malt doughing into the mash at well greater than pH 5.4 require the addition of more acidulated malt rather than less to bring it back to pH 5.4 in the mash?
 
My BW copy kicks out with an "Invalid Value" error for any acidulated malt strength modifier factor selection of greater than 2.0.

Oddly enough, assuming first and foremost that I'm entering things correctly, in BW what I'm seeing is that as the weight of an exclusively low Lovibond Pilsner malt based grain bill is increased, the amount of acidulated malt required to achieve 5.4 pH in the mash needs to be reduced. That seems to me to be intuitively (if not also factually) incorrect. Shouldn't the addition of more malt doughing into the mash at well greater than pH 5.4 require the addition of more acidulated malt rather than less to bring it back to pH 5.4 in the mash?

You can place restrictions on individual cells in Excel. If i had to guess that's what martin has done to match his recommendation of between 0.5-2.0.

Since the base malt has a color based acidity calculation in most software, it might explain what you are seeing.
 
I recently brewed a batch where I assumed a 1.0 for the Acid Malt Strength modifier and came in low on pH. I played with the numbers and it turns out that an Acid Malt Strength modifier of 2.3 was required to match the pH I measured.

I don't know what the Acid Malt Strength modifier is but I'm guessing that the program assumes that sauermalz produces 0.02*(Acid Malt Strength modifier)*weight_sauermalz. This isn't how sauermalz works. It is a malt with lactic acid added to it. Sauermalz of x% lactic acid content does not behave as (x/100)*weight_sauermalz lactic acid. To illustrate this the graph shows the proton yields of 88% lactic acid and 38.6 grams of Weyermanns Sauermalz. The weight of sauermalz was chosen to give the same proton yield at target pH 5 as the lactic acid.

The significant thing the graph illustrates is that proton yield of sauermalz is appreciably more sensitive to target pH than is lactic acid. An unsophisticated program that does not recognize this will, thus be in error but not by so much as a factor of 2.3. While this may explain part of the discrepancy I would look for other problems in the spreadsheet or data entries in trying to explain why it predicts that you need half as much sauermalz as you actually did.

Sauermalz.jpg
 
I don't know what the Acid Malt Strength modifier is but I'm guessing that the program assumes that sauermalz produces 0.02*(Acid Malt Strength modifier)*weight_sauermalz. This isn't how sauermalz works. It is a malt with lactic acid added to it. Sauermalz of x% lactic acid content does not behave as (x/100)*weight_sauermalz lactic acid. To illustrate this the graph shows the proton yields of 88% lactic acid and 38.6 grams of Weyermanns Sauermalz. The weight of sauermalz was chosen to give the same proton yield at target pH 5 as the lactic acid.

The significant thing the graph illustrates is that proton yield of sauermalz is appreciably more sensitive to target pH than is lactic acid. An unsophisticated program that does not recognize this will, thus be in error but not by so much as a factor of 2.3. While this may explain part of the discrepancy I would look for other problems in the spreadsheet or data entries in trying to explain why it predicts that you need half as much sauermalz as you actually did.

The error is in the Sauermalz calculation and not the rest of the spreadsheet. Sauergut, mineral acids, and malt acidity gives bang on pH numbers.

I just haven't been able to suss out the Sauermalz calcs. Something is amiss and it may be an artifact of the same calcs for Sauermalz as BW but with a different backbone. It could also just be a strong batch.

It's a work in progress.
 
A.J., if RPIScotty states that at a strength modifier of 1.0 he overshot on the acid and went well below the mash pH target, it means that 1.0 was making him add too much acidulated malt. At a factor of 2.3 the spreadsheet must be advising the addition of much less acidulated malt.
 
The error is in the Sauermalz calculation and not the rest of the spreadsheet. Sauergut, mineral acids, and malt acidity gives bang on pH numbers.

I just haven't been able to suss out the Sauermalz calcs. Something is amiss and it may be an artifact of the same calcs for Sauermalz as BW but with a different backbone. It could also just be a strong batch.

It's a work in progress.

Is this for BW, or for your spreadsheet, or both?
 
A.J., if RPIScotty states that at a strength modifier of 1.0 he overshot on the acid and went well below the mash pH target, it means that 1.0 was making him add too much acidulated malt. At a factor of 2.3 the spreadsheet must be advising the addition of much less acidulated malt.

This
 

Was the reduction for 2.3 vs 1 on the modifier such that (for example):

1) Modifier set at 1.0: Spreadsheet says to add 7 ounces of acidulated malt

2) Modifier set at 2.3: Spreadsheet says to add 3 ounces of acidulated malt

Where: 7/2.3 = 3 (rounded)

I'm seeing something similar to this in BW, albeit that I can't select 2.3 as a modifier, with a limiter set at 2 forbidding the ability to exceed 2.0 in BW. At a selector setting of 1.5, BW appears to be more in line with A.J. and Kai as to acidulated quantities required. At a selector setting of 1.0 it is suggesting well more acidulated to be added than would Kai or A.J.. On first guess, a selector setting of 1.0 represents 2% lactic acid in the acidulated malt by weight, and a selector setting of 1.5 represents 3% lactic acid in the acidulated malt by weight. I didn't reach beyond this, but it appears (given only two data points) to be linear.

But at the same time, as Pilsner (like) grist weight goes up, acidulated malt requirement goes down, regardless of the modifier one selects.
 
Since the base malt has a color based acidity calculation in most software, it might explain what you are seeing.

I just checked, and color shift does explain much of what I'm seeing. But Pilsner malt is on the basic side of a presumed mash target of 5.4 pH. And changing the batches overall SRM color should not change this fact such that with additional quantity the Pilsner malt somehow continually becomes "relatively" more acidic with respect to 5.4 pH. It merely is what it is, and its basic nature does not change along with final batch color. I set mineralization to zero for this to avoid that influence as a possible pH modifier.
 
As its your spreadsheet why use 'strength modifiers'? You can put in a proper model for sauermalz i.e. one that recognizes that sauermalz does not behave just like lactic acid.
 
A.J., if RPIScotty states that at a strength modifier of 1.0 he overshot on the acid and went well below the mash pH target, it means that 1.0 was making him add too much acidulated malt. At a factor of 2.3 the spreadsheet must be advising the addition of much less acidulated malt.

Didn't know whether it went in the numerator or denominator but assumed that it went in the numerator implying that the program would call for less.
 
As its your spreadsheet why use 'strength modifiers'? You can put in a proper model for sauermalz i.e. one that recognizes that sauermalz does not behave just like lactic acid.

That's what I'm trying to do! Can you elaborate on the model you proposed before? I'd like to incorporate something that suits my calculations better. I currently:

1.) Use DI pH from Weyermann malt sheets for all base malts.

2.) In addition to that, I model Munich along with the other crystals malts and add a color based modifier based on observations in the brewery

3.) Model Sauergut

I'd like to incorporate something better for Sauermalz as it's the only thing I'm a bit unsure on as far as how it incorporates into my sheet. I'm basically modeling it just like BW does and I have a feeling that the differences in my algorithm are throwing it off.

For the strength modifier:

1.3 matches Kai, 1.5 matches Weyermann and I've been using 2.3 for my recent batch. BW is the strongest at 1.
 
I just checked, and color shift does explain much of what I'm seeing. But Pilsner malt is on the basic side of a presumed mash target of 5.4 pH. And changing the batches overall SRM color should not change this fact such that with additional quantity the Pilsner malt somehow continually becomes "relatively" more acidic with respect to 5.4 pH. It merely is what it is, and its basic nature does not change along with final batch color. I set mineralization to zero for this to avoid that influence as a possible pH modifier.

I just checked this phenomenon in BW using 88% lactic acid instead of acidulated malt, and the very same thing happens. As more and more of a light colored base malt is added to the grist bill, slightly but noticeably less and less lactic acid is required to neutralize the mash to a pH of 5.4.
 
That's what I'm trying to do! Can you elaborate on the model you proposed before?

It's the model that was introduced in Palmer's book and fully set forth in MBAA TQ vol. 52, no. 1, 2015, pp. 3-12
Predicting and Controlling Mash pH Using Simple Models for Mash Component Acid/Base Characteristics

In a nutshell, each mash component (water, malts, acids and bases we add) comes to us with an intrinsic pH and when a bunch of mash components are mixed and settle out at a particular pH some substances (the acids) have donated protons and others (the bases) have absorbed them. The pH of the mash is the pH at which the sum of the donated protons just equals the sum of the absorbed protons.

At https://www.homebrewtalk.com/showthread.php?t=473408 I describe how to compute the charges on the carbonate/bicarbonate species from the alkalinity if the water. Using the notation of that post the protons required (proton deficit) required to get the water from its source pH =pHs to mash pH = pHz is V*C*( Q(pHz) - Q(pHs) ) where V is the mash water volume in liters, C is the total carbo per liter (instructions for computing this are given), Q(pHz) is the charge on carbo at some arbitrary pHz and Q(pHs) is the charge on the carbo at the water source pH = pHs. Instructions for computing the Q's are given.

Malts are modeled by a third order Taylor expansion. For example the protons required to move Weyermanns Sauermalz to pHz is

-292*dpH + 68.443*dpH^2 - 5.3985*dpH^3 mEq/kg•pH

dpH = pHz - pHDI i.e. the difference between the pH of interest and the DI mash pH which, for this sauermalz, is 3.62. For reasonable mash pH the calculated 'requirement' for sauermalz will be a negative number meaning that this malt will supply protons rather than absorb them is moving to pHz.

For Weyermanns pilsner the protons reqired are
-40.69*dpH + 14.821*dpH^2 - 10.008*dpH^3 mEq/kg•pH
and pHDI = 5.62. Multiply by the mass of the malt to get the total mEq for the mash from this component.

The question is as to where to get the coefficients descriptive of the particular malts. The best thing to do, of course, is to 'titrate' the malts of interest using the technique described in Palmer's book or the MBAA TQ paper and fit a third order polynomial. This is a lot of work. I've got data on a handful of malts. Note that Kai measured the amount of acid or base required to get malt samples to pH 5.7 and from that we can approximate the first coefficient as (mEq acid required to shift 1 kg to pH 5.7)/(pHDI - 5.7). While the linear only model isn't as good as the third order one it is quite usable especially if one has the full model for the base malt.

Strong acids add V*N mEq protons where N is the normality of the acid and V the volume added in mL. Strong Bases absorb V*N mEq protons where N is the normality of the base. Lactic acid requires
-12.4962+ 0.0668348*W+4.57878*pH + 0.000231738*W*W + 0.00787279*W*pH -0.4193*pH*pH
mEq/mL which, as the result will be negative means it is a proton supplier at mash pH. W is the strength of the lactic acid in % w/w and pH is the target pH. For phosphoric acid the proton requirement is Q(pHz) where Q(pHz) is calculated for the phosphate system as described at https://www.homebrewtalk.com/showthread.php?t=473408 (referenced earlier).

Finally we need to account for the H+ ions produced by the calcium/phytin reaction. For this the required protons can be estimated as
-V*([Ca++] + [Mg++]/2)/3.5 mEq
which,as it is a negative number, means that protons are supplied. V is the volume of the mash water in liters and [] represent the hardnesses in mmmol/L. The factor 3.5 is based on Kolbach's observations at knockout. I usually use a factor of 7 rather than 3.5 when doing estimates for mash.

To design a mash for a particular pHz compute the surfeits and deficits at pHz as described above and add them all up. Adjust the quantities of added acids or bases or of sauermalz and specialty grains until the sum is 0. To estimate the pH of a particular combination of components find the pH which zeroes the sum. Use Excel's Solver or root bisection.
 
It's the model that was introduced in Palmer's book and fully set forth in MBAA TQ vol. 52, no. 1, 2015, pp. 3-12
Predicting and Controlling Mash pH Using Simple Models for Mash Component Acid/Base Characteristics

In a nutshell, each mash component (water, malts, acids and bases we add) comes to us with an intrinsic pH and when a bunch of mash components are mixed and settle out at a particular pH some substances (the acids) have donated protons and others (the bases) have absorbed them. The pH of the mash is the pH at which the sum of the donated protons just equals the sum of the absorbed protons.

At https://www.homebrewtalk.com/showthread.php?t=473408 I describe how to compute the charges on the carbonate/bicarbonate species from the alkalinity if the water. Using the notation of that post the protons required (proton deficit) required to get the water from its source pH =pHs to mash pH = pHz is V*C*( Q(pHz) - Q(pHs) ) where V is the mash water volume in liters, C is the total carbo per liter (instructions for computing this are given), Q(pHz) is the charge on carbo at some arbitrary pHz and Q(pHs) is the charge on the carbo at the water source pH = pHs. Instructions for computing the Q's are given.

Malts are modeled by a third order Taylor expansion. For example the protons required to move Weyermanns Sauermalz to pHz is

-292*dpH + 68.443*dpH^2 - 5.3985*dpH^3 mEq/kg•pH

dpH = pHz - pHDI i.e. the difference between the pH of interest and the DI mash pH which, for this sauermalz, is 3.62. For reasonable mash pH the calculated 'requirement' for sauermalz will be a negative number meaning that this malt will supply protons rather than absorb them is moving to pHz.

For Weyermanns pilsner the protons reqired are
-40.69*dpH + 14.821*dpH^2 - 10.008*dpH^3 mEq/kg•pH
and pHDI = 5.62. Multiply by the mass of the malt to get the total mEq for the mash from this component.

The question is as to where to get the coefficients descriptive of the particular malts. The best thing to do, of course, is to 'titrate' the malts of interest using the technique described in Palmer's book or the MBAA TQ paper and fit a third order polynomial. This is a lot of work. I've got data on a handful of malts. Note that Kai measured the amount of acid or base required to get malt samples to pH 5.7 and from that we can approximate the first coefficient as (mEq acid required to shift 1 kg to pH 5.7)/(pHDI - 5.7). While the linear only model isn't as good as the third order one it is quite usable especially if one has the full model for the base malt.

Strong acids add V*N mEq protons where N is the normality of the acid and V the volume added in mL. Strong Bases absorb V*N mEq protons where N is the normality of the base. Lactic acid requires
-12.4962+ 0.0668348*W+4.57878*pH + 0.000231738*W*W + 0.00787279*W*pH -0.4193*pH*pH
mEq/mL which, as the result will be negative means it is a proton supplier at mash pH. W is the strength of the lactic acid in % w/w and pH is the target pH. For phosphoric acid the proton requirement is Q(pHz) where Q(pHz) is calculated for the phosphate system as described at https://www.homebrewtalk.com/showthread.php?t=473408 (referenced earlier).

Finally we need to account for the H+ ions produced by the calcium/phytin reaction. For this the required protons can be estimated as
-V*([Ca++] + [Mg++]/2)/3.5 mEq
which,as it is a negative number, means that protons are supplied. V is the volume of the mash water in liters and [] represent the hardnesses in mmmol/L. The factor 3.5 is based on Kolbach's observations at knockout. I usually use a factor of 7 rather than 3.5 when doing estimates for mash.

To design a mash for a particular pHz compute the surfeits and deficits at pHz as described above and add them all up. Adjust the quantities of added acids or bases or of sauermalz and specialty grains until the sum is 0. To estimate the pH of a particular combination of components find the pH which zeroes the sum. Use Excel's Solver or root bisection.

As always, thank you for the informative post. My water calculations are accurate with the exception of how Sauermalz is being modeled so i'll take a look at what you posted and see what I can do to incorporate a better model when using Sauermalz.

With no Sauermalz additions my calcs predict on the nose with the DI pH for base malts plus color based for Specialties (and Munich), with Sauergut, Antioxidant additions, and mineral acids.

The only quirk is the Sauermalz.

My model works as follows:

1.) Base malts have a user input for a DI pH number which we get from Weyermann's lot analysis sheets for each bag of malt. These are them averaged for a single DI pH number.

2.) In addition to have a user input for DI pH, my collaborator was finding that when he brewed his Munich heavy beers like Dunkel, he was seeing a pH shift down that wasn't accounted for in the estimation. So we tried modeling Munich as a crystal malt and summing it with the grain acidities of the other specialties. That solved it.

3.) Specialty malts get a color based malt acidity value and are summed.

4.) Sauergut additions are calculated using PK's 60/30 ml/kg values for mash and kettle.

5.) We are advocates of Low Oxygen brewing so we account for the empirically derived pH shift from using NaMeta or KMeta.

As I said, the one goofy thing is the Sauermalz. Now for me, changing the strength modifier is a suitable workaround for actually modeling it correctly, but I'm always trying to make the model more solid.

Right now we are typically within +\- 0.01 of predicted with the model sans Sauermalz. This doesn't take into account and instrument or buffer error, but in the end we don't care anyway. It predicts what we measure on a consistent basis.

I'll take a look at what you posted and see how I can rework that Sauermalz calcs to try and improve its performance.
 
Well then take just the sauermalz model. It is the same as for any other grain. Just different coefficients. If your model can accomodate other acids then it should be able to accomodate the the acid released by sauermalz.

I can't really figure out what you are doing from the brief description you give but I will comment that predicting mash pH by averaging the DI mash pHs of a couple of grains isn't going to work unless equal amounts of the grains are used and they have the same buffering. It is little wonder that Munich doesn't 'fit' this model. It is great that Wyermann publishes the DI mash pH for each grain but that is only half the story, They also need to tell us how much acid or base it takes to move a unit mass of the grain to a couple of pH values in the typical mash pH range.

I will comment that if you take a single malt, make a mash with it and measure its pH you will not very likely get a number within ±0.01 of what Weyermanns reported. It is possible but unlikely. Even a broken clock tells the right time twice a day. Given that they are (most likely) using technical buffers with a tolerance of ±0.02 with a meter with accuracy of ±0.014 (typical - note this is not the same as stability which is typically 0.01 or better in a good meter) and that you are doing the same you have an uncertaintly of rms(0.02, 0.02, 0.014, 0.014) = ±0.034. Add to this the fact that pH readings drift over time by more than a couple of hundredths as equilibrium is approached and it is clear that if your readings are coming in within ±0.01 of the predictions of any algorithm you are somehow deceiving yourself probably through that perennial bete' noir confirmation bias. If I make a test mash mixing malts that I have measured and acids of known purity I may get within ±0.01 or ±0.02 provided that I use the same meter calibrated with the same buffers that I used to determine the malt coefficients and that the measurement is made at the same time after strike as the data used to compute the malt coefficients. If I use malt data from a correspondent and take the mash measurement at a time different from what he used when he characterized the malt I can't hope to be that accurate. All this aside, we learn with experience that if something is too good to be true it nearly always isn't. Mash pH prediction accuracy of ±0.01, especially by the means you are describing if I understand your description, is definitely too good to be true.
 
Well then take just the sauermalz model. It is the same as for any other grain. Just different coefficients. If your model can accomodate other acids then it should be able to accomodate the the acid released by sauermalz.

I can't really figure out what you are doing from the brief description you give but I will comment that predicting mash pH by averaging the DI mash pHs of a couple of grains isn't going to work unless equal amounts of the grains are used and they have the same buffering. It is little wonder that Munich doesn't 'fit' this model. It is great that Wyermann publishes the DI mash pH for each grain but that is only half the story, They also need to tell us how much acid or base it takes to move a unit mass of the grain to a couple of pH values in the typical mash pH range.

I will comment that if you take a single malt, make a mash with it and measure its pH you will not very likely get a number within ±0.01 of what Weyermanns reported. It is possible but unlikely. Even a broken clock tells the right time twice a day. Given that they are (most likely) using technical buffers with a tolerance of ±0.02 with a meter with accuracy of ±0.014 (typical - note this is not the same as stability which is typically 0.01 or better in a good meter) and that you are doing the same you have an uncertaintly of rms(0.02, 0.02, 0.014, 0.014) = ±0.034. Add to this the fact that pH readings drift over time by more than a couple of hundredths as equilibrium is approached it is clear that if your readings are coming in within ±0.01 of the predictions of any algorithm you are somehow deceiving yourself probably through that perennial bete' noir confirmation bias. If I make a test mash mixing malts that I have measured and acids of known purity I may get within ±0.01 or ±0.02 provided that I use the same meter calibrated with the same buffers and meter I used to calibrate the meter and that the measurement is made at the same time after strike as the data used to compute the malt coefficients. If I use malt data from a correspondent and take the mash measurement at a time different from what he used when he characterized the malt I can't hope to be that accurate. All this aside, we learn with experience that if something is too good to be true it nearly always isn't. Mash pH prediction accuracy of ±0.01, especially by the means you are describing if I understand your description, is definitely too good to be true.

This happens every time this topic comes up: I'm not making claims about accuracy. All I am saying is that the model predicts the measurements within a tight range every time. It just so happens to be within +/- 0.01 of what we measure. Maybe it's just a consistent error in meter that puts us there, or maybe it's just dead on. I don't really know or care all that much.

That doesn't mean anything other than the fact that the estimation is consistent.

The model you propose for pH estimation is technically great and represents the most accurate model (on paper) that I have seen, with one glaring caveat: it's not easy for most to execute and/or it would be too easy for people to screw up. In that sense, the model you propose will always be less accurate because it's easier for user error to creep in. My model is not all that elegant or original, but it's easy to use and doesn't ask for much from a user input standpoint.

All I've done is try to compensate for actual (in this case average or in the ballpark) DI pH in the estimation and it's made a world of difference. Debating the merits beyond that tends to turn into a verbal sparring match. I'm not debating our spreadsheet because there isn't anything wrong with it besides how it handles Sauermalz. It's consistent and reliable, more so than the others I've used.

For reference, our estimation equation is as follows:

Mash pH = DI pH – (pH shift term * (Ca, Mg and HCO3 Term – Σ Grain Acidity)) – ΔpH (Sauergut) - ΔpH (Antioxidants)

DI pH = Average measured or malt sheet DI pH of all base malts used
pH Shift Term = 0.14-0.17
Ca, Mg, and HCO3 Term = the shift from those contributions
Σ Grain Acidity = The summation of color based acidity estimates
ΔpH (Sauergut) = pH drop from 60 ml/kg of 1-1.8% biological acid
ΔpH (Antioxidants) = pH drop of 0.1 p/100 ppm of metabisulfite in the mash

I respect and reference your opinions AJ, very extensively I might add, but your answer can't always, "That's not possible" or "You're doing something wrong". Readings are always taking 25-30 minutes into the mash.

Or maybe what i'm doing is wrong, but my tastes buds tell me otherwise and I like the consistency. An elegant mathematical model is only as good as the beer it makes, and the consistency it provides.

Maybe I can send you a abridged copy of the calculation and you can try it out. If you care to. Other than that, I don't know what else to tell you.

If a rabbit hops into my yard and I tell you but your response is, "There aren't any rabbits in this area...", how many bunnies do I have to see before you'll believe me? Is it really a squirrel and i'm fooling myself? Something tells me if I kill it and it tastes like a rabbit then I'm doing something right.

Lastly:

Given that they are (most likely) using technical buffers with a tolerance of ±0.02 with a meter with accuracy of ±0.014 (typical - note this is not the same as stability which is typically 0.01 or better in a good meter)...

IMHO, this is a good reason to take their readings at face value.

In the end i'm not trying to doubt, insult or argue with you in any way. You give more detailed information away more freely then anyone posting here. I realize that my choice in terms (accuracy, precision, etc.) may be wonky sometimes but all I care about is whether I can predict pH reliably. If my algorithm is wonky but agrees with experiment, i'll take that over a more elegant algorithm any day of the week.
 
This happens every time this topic comes up: .
This is ringing a bell. And it is to be expected.

I'm not making claims about accuracy. All I am saying is that the model predicts the measurements within a tight range every time. It just so happens to be within +/- 0.01 of what we measure.
That really looks as if you are reporting fantastic accuracy. So good that it is not believable to those with experience in this area.

Maybe it's just a consistent error in meter that puts us there, or maybe it's just dead on. I don't really know or care all that much. That doesn't mean anything other than the fact that the estimation is consistent.
It seems that you and I have different ideas as to how accuracy is defined. Perhaps that explains the disconnect. If you think you are seeing accuracy, defined in the usual way, of ±0.01 pH then you should be worried. Whether you chose to be or or not is your decision.




The model you propose for pH estimation is technically great and represents the most accurate model (on paper) that I have seen, with one glaring caveat: it's not easy for most to execute and/or it would be too easy for people to screw up.
My goal here was to give you a fairly robust means of determining the amount of acid released by sauermalz, not defend my model but as you mentioned it the model itself is exquisitely simple: a matter of adding up proton deficits and surfeits. The difficulty is in getting data to put into it. This, I agree, is beyond what homebrewers or even a fairly large sized commercial operation could be expected to do. This is why it is, I believe, up to the maltsters. If they can do a Congress mash to get an estimate of the malt's DI pH they can do a couple or 3 more with some acid or base added in order to provide the buyer with sufficient data to determine proton surfeit or deficit in the mash.


My model is not all that elegant or original, but it's easy to use and doesn't ask for much from a user input standpoint.
KISS is good.


All I've done is try to compensate for actual (in this case average or in the ballpark) DI pH in the estimation and it's made a world of difference.
Clearly using actual malt data for pHDI is a step up in potential accuracy relative to guessing at it from color.


Debating the merits beyond that tends to turn into a verbal sparring match. I'm not debating our spreadsheet because there isn't anything wrong with it besides how it handles Sauermalz.
It shouldn't be. I should be able to point out inconsistencies I see and you should be able to consider my concerns and, as long as I have been clear enough that you understand them, see why I stand where I do. It is, ultimately, of course up to you to decide whether you wish to accept my position or not.


For reference, our estimation equation is as follows:

Mash pH = DI pH – (pH shift term * (Ca, Mg and HCO3 Term – Σ Grain Acidity)) – ΔpH (Sauergut) - ΔpH (Antioxidants)

DI pH = Average measured or malt sheet DI pH of all base malts used

It should be clear that if we mix malt A with DI mash pH of pHa and malt B, with DI mash pH of pHb that the DI pH of a mixture will be somewhere between pHa and pHb but it should also be clear that if we have a preponderance of malt A that the pH will be closer to pHa and if there is a preponderance of malt B that it would be closer to pHb. Thus a weighted average is going to give a more accurate estimate than the simple average. If, for example, the two malts have DI pH's of 5.623 and 5.889 the average is 5.754. The DI mash pH calculated by balancing protons is 5.739 - not exactly the same as the average because the two malts in this example have differing buffering capacities (40 and 28), but very close. Now if, conversely, we use 90% of one and 10% of the other the calculated DI mash pH is 5.645 which is off by 0.1 pH from what the average predicts. The fix is exceeding simple. Use the weighted average rather than the straight average. The weighted average is 5.647 which is within 0.002 of the robust calculations result.

Now what's in the last paragraph strongly suggests that you could considerably improve the accuracy of your estimate by a simple modification to your algorithm. The suggested improvement passes the tests imposed by robust calculation and, more importantly, by common sense. If you adopt it you gain credibility. It would seem, however, that you will reject it because you believe your algorithm to be near perfect and clearly to modify it to give a different answer would render it less so.



pH Shift Term = 0.14-0.17
Ca, Mg, and HCO3 Term = the shift from those contributions
Σ Grain Acidity = The summation of color based acidity estimates
ΔpH (Sauergut) = pH drop from 60 ml/kg of 1-1.8% biological acid
ΔpH (Antioxidants) = pH drop of 0.1 p/100 ppm of metabisulfite in the mash

I can make some additional comments on these terms but will not do so here unless you wish me to.

I respect and reference your opinions AJ, very extensively I might add, but your answer can't always, "That's not possible" or "You're doing something wrong".
It isn't always that but when something does not pass the common sense test it is going to attract my attention.




Or maybe what i'm doing is wrong,
Taking the example of pHDI estimation above you are not doing something wrong but what you are doing can be very simply improved upon if the desire is to get accurate pH measurements. The simple average does form an estimate of the DI mash pH of mixed malts but not as good an estimate as the weighted average. At the same time if your mixtures are all about the same and especially if they are typically of equal parts and the malts have similar bufferings, and they do more or less, then the simple and weighted averages are going to give close to the correct answer.

but my tastes buds tell me otherwise and I like the consistency.
Perhaps we are confused about precision as opposed to accuracy.

An elegant mathematical model is only as good as the beer it makes, and the consistency it provides.
The model I propose is actually simpler than yours: ∑(proton deficit) = 0. The art is in estimating the proton deficits. The reward is more accurate mash pH prediction/control which, while that may be a sine qua non in the making of good beer is hardly sufficient by itself for making good beer.



If a rabbit hops into my yard and I tell you but your response is, "There aren't any rabbits in this area...", how many bunnies do I have to see before you'll believe me? Is it really a squirrel and i'm fooling myself? Something tells me if I kill it and it tastes like a rabbit then I'm doing something right.

There are no mountain lions in Northern Virginia. But my wife saw one in our yard one morning. I also worked with a guy who reported to the security office that there were 'drug takers' living in the elevator shafts. Sometimes one does not know what to believe. Other people have seen mountain lions in Virginia but an inspection of the elevator shafts did not reveal any drug takers in residence nor has anyone ever written a mash pH program that will estimate mash pH consistently to an accuracy of ±0.01 pH. Here I think the problem is that what I mean by accuracy and what you mean are very different things.


IMHO, this [the fact that Weyermanns reported DI mash pH readings are probably good to ±0.03 pH absolute] is a good reason to take their readings at face value.
Absolutely. And that's good enough for most purposes but it also represents proof positive that one cannot obtain an estimate using their data which is accurate to ±0.01 pH.
 
I think i'm using the wrong terms but in general we are on the same page, which isn't a shocker because I've tried to take much of your advice as is possible.

A few things:

1.) The weighted average of DI pH is an easy fix. I'll incorporate that.

2.)
I can make some additional comments on these terms but will not do so here unless you wish me to.

I'd be interested to hear your thoughts. Keep in mind, none of my work is original in the sense that I came up with it. I've worked hard on the calculations and presentation in Excel but it won't hurt my ego a bit if you make suggestions on how to improve it.

3.) I think even as an Electrical Engineer with a strong STEM background I confuse precision and accuracy. There is undoubtedly a disconnect there. I am only reporting what I see and finding the right terms is a point of contention sometimes. What we use is consistently right, i.e. the estimations usually match the actuals using an Extech pH110, properly calibrated and stored, with readings usually coming after the first Beta rest (25-30 minutes into mash). From what we've discussed the actual measured value may be up or down from there.

Again, I value the conversation.
 
I think i'm using the wrong terms but in general we are on the same page..
In terms of the actual algorithm we are closer to being on the same page than one might at first think. We must find the pH at which the sum of the proton deficits of all the mash components is 0.

A + B + C + D = 0

A: Total proton deficit of the malts. The proton deficit of malt number i per unit mass is
a1i*(pH - pHdi) + a2i*(pH - pHdi)^2 + a3i*(pH - pHdi)^3
in which pH is the mash pH and pHd the distilled water mash pH. The a1 coefficient dominates the others and is always negative. Thus to get malt i to any pH less than pHdi we have a positive number (e.g. -40*(5.5 - 5.8) = +12). We need protons. A proton deficit is positive. Conversely, if pHdi is less than the target (e.g. -40*(5.5 - 5.3) = -8) we get a negative number. A negative deficit value represents a surfeit of protons from this malt.

For the whole mash we need the proton deficits of all the malts

A = ∑mi*(a1i*(pH - pHdi) + a2i*(pH - pHdi)^2 + a3i*(pH - pHdi)^3 )

where mi is the mass of malt i.

B: B is the proton deficit of the water. It is found from the alkalinity as
B = Vw*Ct*( Q(pH) - Q(pHs) ) in which Vw is the volume of the mash water, Ct is the molar sum of all the carbonic, bicarbonate and carbonate ions in a liter, Q(pH) is the charge on a mole of carbo at the target pH and Q(pHs) is the charge on a mole of carbo at the pH at which the water comes to us. Earlier posts dicuss how to calculate Ct and the two Q's from the alkalinity, the sample pH and the end point pH for the titration which was used to determine the alkalinity. As the target pH is usually lower than the sample pH (pHs) B is usually a positive number representing a proton deficit.

C: C is the proton deficit resulting from the action of calcium and magnesium on phytin in the malt.

C = -Vw*( [Ca++] + [Mg++]/2)/f
in which Vw is, as before, the volume of the mash water (L), the quantities in brackets the calcium and magneisum hardnesses (in mEq/L) and f an unknown factor. Kolbach found f=3.5 for knockout wort. We are sure that it is greater than 3.5 for mash and suspect it is about 7. As C is a negative number it represents a proton surfeit i.e. the reaction supplies hydrogen ions.

D: D is a term which represents the sum of the proton deficits of any acids or bases added to the mash.

D = ∑Vj*Nj

where Vj is the added volume (mL) of solution of added acid or base and Nj is the normality of that solution (the number of mEq of protons absorbed or released by 1 mL of the solution). Nj is positive for bases and negative for acids. As we have seen in earlier posts Nj is a function of pH for lactic and phosphoric acids but not for strong acids like sulfuric and hydrochloric or strong bases (calcium hydroxide, sodium hydroxide, sodium bicarbonate, the latter of which is strong relative to mash pH).

Now we re-write the basic equation as

A(pH) + B(pH) + C + D(pH) = 0

All of the terms, except C, are dependent on pH. Thus, while it is easy to build a spreadsheet that calculates the sum and manipulate the mi and Vj until the sum is 0 in order to design a mash with a particular pH it is not, ostensibly, so easy to find the value of pH which, for a given set of mi and Vj zeroes the sum because A, B and D are not linear in pH. In fact it is quite easy to do this exact thing using Excels Solver but for some reason people are afraid to use that powerful tool. Thus we seek approximations which might allow solution for pH in closed form or, IOW, we seek to linearize each of the terms.

Clearly A is linear in pH if we ignore the squared and cubed terms so that A becomes

A = ∑mi*ai*(pH - pHdi) = ∑mi*ai*pH - ∑mi*ai*pHdi = pH*∑mi*ai - ∑mi*ai*pHdi

We have noticed in running the full algorithm against many problems that

B ≈Vw*0.9*alkalinity

where alkalinity is in units of mEq/L

This eliminates pH dependence from this term.

C does not depend on pH

Lactic acid is almost a strong acid as it is nearly 100% dissociated at mash pH. One mEq of phosphoric acid yields up approximately 1 mEq of protons at pH values typical for mash, sodium bicarbonate absorbs about 1 mEq of protons per mmol when the target is in the usual mash pH range. Thus if we simply change D to

D = ∑VjMj

i.e. substitute the molarity if the acid solutions for the normality we remove the pH dependence and we can write the equation as

pH*∑mi*ai - ∑mi*ai*pHdi + B + C + D = 0

This is easily solved for pH as

pH = (∑mi*ai*pHdi - B - C - D)/∑mi*ai

Now lets make the further assumption that all the ai are about the same and have value a. Then we have

pH = a*∑mi*pHdi/a*∑mi - (B +C + D)/a*∑mi

the a's cancel and this gives

pH = ∑mi*pHdi/∑mi - (B +C + D)/a*∑mi

Note that the first term is simply the weighted average of the individual malt DI mash pH's. B, C and D are the proton deficits of water, calcium (effective) and added acids and bases and a*∑mi is an approximation to the buffering capacity of the entire mash.

The similarity between this and the RPIScotty formula is clear.

The thing about the above that would, to me, at first appear most disturbing, is the replacement of each ai, which can range from -30 to -80, but is usually between say 40 and 60, by a single number. I recall now that the last time this discussion came up I did some sensitivity analysis and found mash pH predictions to be much more dependent on the accuracy of DI mash pH input than on accuracy of ai input. This supports the observation that using actual DI mash pH values, if you have them, is very beneficial (as compared to guessing them from a malt color correlation, for example).
 
I'm still trying to figure out why in BW it takes less acid to bring a 100% Pilsner malt (actually a low Lovibond color base malt) grist bill with a weight of 15 lbs. to a mash pH of 5.4 than it does for 10 lbs. And less still for 20 lbs. This with meneralization set at zero. 3.0 mL of 88% lactic acid is required for 10 lbs.of base malt, Then 2.8 mL for 15 lbs. And lastly 2.6 mL for 20 lbs. Base malt Lovibond set at 1.7, and strike water kept at 5 gallons of distilled throughout.

What am I doing wrong?

RPIScotty, are you seeing the same thing for your spreadsheet?
 
I'm still trying to figure out why in BW it takes less acid to bring a 100% Pilsner malt (actually a low Lovibond color base malt) grist bill with a weight of 15 lbs. to a mash pH of 5.4 than it does for 10 lbs. And less still for 20 lbs. This with meneralization set at zero. 3.0 mL of 88% lactic acid is required for 10 lbs.of base malt, Then 2.8 mL for 15 lbs. And lastly 2.6 mL for 20 lbs. Base malt Lovibond set at 1.7, and strike water kept at 5 gallons of distilled throughout.

What am I doing wrong?

RPIScotty, are you seeing the same thing for your spreadsheet?


I'll take a look. Are we talking analytical results or your empirical results?

EDIT: I don't have that issue in my sheet. Could do be that BW uses a color-based acidity calc for base Malts. That would maybe drive down the pH as mass was increased?
 
Should the answer be that it takes twice as much acid to bring a grist consisting of 20 lbs. of 1.7L base malt doughed into 5 gallons of distilled water with no added mineralization to a mash pH of 5.4 as it does for 10 lbs. of the same base malt into the same 5 gallons of distilled water?

I just did this for 5.71 DIpH base malt in Brewer's Friend and got the following:

10 Lbs. = 3.90 mL of 88% Lactic Acid
20 Lbs. = 7.87 mL of 88% Lactic Acid

And then I repeated it in a program which I have been working on and I'm seeing:

10 Lbs. = 3.79 mL of 88% Lactic Acid
20 Lbs. = 7.58 mL of 88% Lactic Acid
 
Should the answer be that it takes twice as much acid to bring a grist consisting of 20 lbs. of 1.7L base malt doughed into 5 gallons of distilled water with no added mineralization to a mash pH of 5.4 as it does for 10 lbs. of the same base malt into the same 5 gallons of distilled water?

I just did this for 5.71 DIpH base malt in Brewer's Friend and got the following:

10 Lbs. = 3.90 mL of 88% Lactic Acid
20 Lbs. = 7.87 mL of 88% Lactic Acid

And then I repeated it in a program which I have been working on and I'm seeing:

10 Lbs. = 3.79 mL of 88% Lactic Acid
20 Lbs. = 7.58 mL of 88% Lactic Acid


Yes. That makes sense at a high level. I know that in my sheet, going with a user input for DI pH eliminated a color based estimation for base malt.

A color based estimation for base Malts would explain why if you increase a grain bill of the same composition by 50% to 100% you'd see a decrease in the amount of acid required to bring the mash lower.

For me it's simple because I use Weyermann Malts exclusively and their Malts are more basic. I just input the DI pH off the sheet and call it good. Sometimes I'll measure to make sure it's in the wheelhouse but per previous posts here, I'm trusting them to a certain degree.
 
Should the answer be that it takes twice as much acid to bring a grist consisting of 20 lbs. of 1.7L base malt doughed into 5 gallons of distilled water with no added mineralization to a mash pH of 5.4 as it does for 10 lbs. of the same base malt into the same 5 gallons of distilled water?

Yes. From #53: pH ≈ ∑mi*pHdi/∑mi - (B +C + D)/a*∑mi. The added acid term is D/a*∑m = ∑Vj*Nj/a*∑mi = V*N/a*∑mi with V being the volume of the single, in this case, added acid, N its normality and a*∑mi the buffering of the mash. This is the approximate pH shift attributable to lactic acid. It is clear from this that if you double the mass of the grain you double the buffering of the mash and twice as much acid will be needed for the same pH shift. For 10 lbs of Weyermann Pils it would take 3.93 mL of 88% lactic to reach pH 5.4. For 15 lbs it would take 5.90 and 20 lbs would require 7.87 mL using the full up model. If we use the approximate model we use

pH*∑mi*ai - ∑mi*ai*pHdi + B + C + D = 0

which simplifies to

(pH - pHdi)* ∑mi*ai + D = 0.

For Weyermanns Pils pHdi is 5.62 and 10 lbs is 4.54 kg so that with an assumed buffering of -35 mEq/kg•pH (it's actually -40.69 at pHdi for this malt but we are exploring what happens if we assume, in order to use the linearized estimator, that all malts have the same buffering as described in #53) we'd have
(5.4 - 5.62)*4.45*(-35) + D = 34.265 + D = 0 so that D = -34.265 mEq is the acid requirement for 10 lbs. The actual acid requirement for 10 lbs (based on the full model of the malt) is -45 mEq. Assuming lactic acid to be a strong acid (another assumption required for linearization) an 88% w/w solution would be 11.77 N implying that we would need 34.625/11.7 = 2.96 mL which is in error, relative to the 3.93 mL calculated by the non linear algorithm, by -25%. This appreciable but not huge error is a consequence of
1)Using an estimated average for the buffering of the malt (a1)
2)Assuming that the malt's buffering is linear (ignoring a2 and a3 coefficients)
3)Assuming lactic acid is a strong acid.

It's easy enough to see the effects of 1) by using the actual value of a1 = 40.69 in (pH - pHdi)* ∑mi*ai + D = 0 which gives the value D = 39.84 mEq. Thus implies that we need 39.83/11.7 = 3.40 mL 88% lactic which is in error relative to the robust answer by -13%. Not too bad.

Note that neither 1) nor 2) nor 3) effects the linearity of pH shift with malt mass.

Now apparently BW calculates an answer close to our approximation assuming a = 35 mEq/kg•pH which is appreciably in error (but not, as we noted above terribly so) for 10 lbs grist and then goes to hell in a hand basket if you increase the malt amount. I can't think of what you could be doing wrong if all you change is the weight of the malt. It must be an error in the program but I have no idea what that might be. I will say that I find that I have to be very careful with signs checking them over and over again to be sure that in increase in proton deficit results in an increase in pH. Perhaps that has something to do with it.
 
Thank you RPIScotty and A.J. !!!

For many months I have been working on a very simple spreadsheet whereby to compute mash pH, and in the process I have literally changed its engine multiple times, and tweaked it many multiples of times beyond that. I have finally settled upon an engine that is so simplistic it boggles the mind. But in all of my travails my results have always seemed to correlate most strongly to Brewers Friend, and despite effort and introduced fudge factors here and there (since totally abandoned, as I couldn't remain honest to myself by using them) never to Bru'n Water.

Due to their obvious high regard for Bru'n Water, I have taken flak from several of my admittedly small group of Beta testers over the past months for my spreadsheets failure to mirror image BW. I have consistently thought thereby that I was on the wrong track regardless of my engine (underlying spreadsheet formulas) of choice, but now I see that my spreadsheet appears to yield results (for admittedly this single test case) which are in high agreement with A.J.'s methods as well as with Brewer's Friend (with which I remain generally close over more than only this test case), albeit reaching said similar end results via vastly more simple formula means.

A simple factor change requiring not more than about 20 seconds worth of my effort would bring my simple spreadsheet dead on with the A.J. method (and Brewer's Friend) for specifically this particular test case (at least). But for an improvement of only a bit less than 3.7% in my spreadsheets output, for now I believe that I will just leave it alone.
 
I don't think anyone can doubt Brun Water's significance in particular as a real watershed in getting people serious about their water but as it stands it is rather clustered, has some major fluff, and it was inevitable that people would take its basic backbone (which is derivative in many ways of things that came before it) and make improvements.

There is a lot of reference material out there: Kai, AJ, Ken Schwartz, etc. and minor improvements to the basic water spreadsheets make it so that you can increase consistently in a major way.
 
Back
Top