// AF = (ln(alk)*0.435) -0.0024 // CF = (ln(ch)*0.435) - 0.40 // TF = (ln(TEMP)*0.757) - 2.66 // TDSf = 0.1 1000 - 2000 header ("Cache-Control: no-cache, must-revalidate"); header ("Pragma: no-cache"); header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); function Clean ($Entry){ $Entry = strip_tags($Entry); $Entry = trim($Entry); return $Entry; } $pool_pH = Clean($pool_pH); $pool_TA = Clean($pool_TA); $pool_CH = Clean($pool_CH); $pool_TH = Clean($pool_TH); function ph_range ($test_type){ switch ($test_type){ case "teststrips": $pH_error = 0.6; break; case "d_teststrips": $pH_error = 0.45; break; case "electronic": $pH_error = 0.4; break; case "dropcount": $pH_error = 0.2; break; case "ps232": $pH_error = 0.2; break; case "titration": $pH_error = 0.2; break; case "": $pH_error = 100; } return $pH_error; } function alk_range ($test_type, $alk){ switch ($test_type){ case "teststrips": $alk_error = $alk * 0.5; break; case "d_teststrips": $alk_error = $alk * 0.4; break; case "electronic": $alk_error = $alk * 0.4; break; case "dropcount": $alk_error = 15; break; case "ps232": $alk_error = 10; break; case "titration": $alk_error = 3; break; case "": $alk_error = 100; } return $alk_error; } function cal_range ($test_type, $cal){ switch ($test_type){ case "teststrips": $cal_error = $cal * 0.7; case "d_teststrips": $cal_error = $cal * 0.5; break; case "electronic": $cal_error = $cal * 0.5; break; case "dropcount": $cal_error = 15; break; case "ps232": $cal_error = 10; break; case "titration": $cal_error = 5; break; case "": $cal_error = 100; break; } return $cal_error; } function temp_range ($temp_test_type){ switch ($temp_test_type){ case "guess": $temp_error = 10; break; case "thermo": $temp_error = 3; break; case "electronic_thermo": $temp_error = 3; break; case "": $temp_error = 100; break; } return $temp_error; } function T_color ($si_v){ $si_v = abs($si_v); if ($si_v > 0.9){ $bgcolor = '#FF0033'; } elseif ($si_v > 0.5){ $bgcolor = '#FF9966'; } elseif($si_v > 0.3){ $bgcolor = '#AAFF33'; } else{ $bgcolor = '#00DD66'; } return $bgcolor; } function SIx ($ph, $alk, $cal, $temp_F){ $af = (log($alk) * 0.435 - 0.0024); $cf = (log ($cal) * 0.435 - 0.40); $tf = (log ($temp_F) * 0.757 - 2.66); $si_c = 12.1; $si = $ph + $af + $cf + $tf - $si_c; $phs = $ph - $si; return $si; return $phs; } $ph_err = ph_range($test_method); $ph_lo = $pool_pH - $ph_err; $ph_hi = $pool_pH + $ph_err; $alk_err = alk_range($test_method, $pool_TA); $alk_lo = $pool_TA - $alk_err; $alk_hi = $pool_TA + $alk_err; $cal_err = cal_range($test_method, $pool_CH); $cal_lo = $pool_CH - $cal_err; $cal_hi = $pool_CH + $cal_err; $temp_err = temp_range($temp_test_method); $temp_lo = $pool_TH - $temp_err; $temp_hi = $pool_TH + $temp_err; if ($submitted == "yes"){ $si_norm = SIx($pool_pH,$pool_TA,$pool_CH,$pool_TH); $si_norm = round($si_norm,1); $si_norm = number_format($si_norm,3); $phs_norm = $pool_pH - $si_norm; $phs_norm = number_format($phs_norm,3); $si_lo = SIx($ph_lo, $alk_lo, $cal_lo, $temp_lo); $si_difference = (0.6 * ($si_norm - $si_lo)); $si_lo = $si_norm - $si_difference; $si_lo = round($si_lo,1); $si_lo = number_format($si_lo,1); $phs_lo = $ph_lo - $si_lo; $si_hi = SIx($ph_hi, $alk_hi, $cal_hi, $temp_hi); $si_difference = (0.6 * ($si_norm - $si_hi)); $si_hi = $si_norm - $si_difference; $si_hi = round($si_hi,1); $si_hi = number_format($si_hi,1); $phs_hi = $ph_hi - $si_hi; } // switch ($pool_TDS) { // case ($pool_TDS > 4000): // $TDSF = 0.15; // break; // case ($pool_TDS > 3000): // $TDSF = 0.14; // break; // case ($pool_TDS > 2000): // $TDSF = 0.13; // break; // case ($pool_TDS > 1500): // $TDSF = 0.12; // break; // default: // $TDSF = 0; // } ?>
All test methods have built-in error; some types of testing have more error, or uncertainity than others. This error is the error that remains when everything is done CORRECTLY!! If you use stale test chemicals, poor sample collection, poor testing techique, and so on . . . the actual error will be even GREATER!.
It's common for test results from teststrips to generate an SI range that goes from "TOO HIGH" all the way to "TOO LOW". The reason is simple: teststrips are simply too inaccurate to allow you to determine your SI.
With other testing methods, you may see a range that is either "TOO HIGH" or "TOO LOW" at one end, and "OK" at the other end. Simply make a SMALL adjustment in your pool's chemistry so the entire range of possible SI values is in the "GOOD" or "ACCEPTABLE" zone.
High saturation index values indicate that your pool water has a tendency to deposit scale at the water line, or inside your pool heater, or possibly, to cloud up. Also, stains from copper are more likely at a high SI. If none of these are happening in your pool, a high SI may not be a problem.
Low SI indicates a tendency to corrode concrete, plaster, Diamondbrite, and the like. Painted concrete pools are also affected. Low SI does not indicate a risk to metal pipes or vinyl liners, unless the pH is ALSO too low.
Langlier SI values have benefit, in understanding pool chemistry . . . sometimes. The pool industry has embraced SI calculations, in some cases, because dealers could calculate SI's easily, and poolowners couldn't. Another attraction is the desire to enumerate everything.
Unfortunately, it's not that simple. To start with, Dr. Langlier who developed the index, specifically noted its unsuitability for use in pool. (I've go a copy of the letter, which I'll try to post, the next time I run across it.) The index is designed for CLOSED systems, like boilers, which are NOT exposed to the atmosphere. So, when it comes time to evaluate results, be cautious: the index may mean less than you think!
Broadly, if the index is HIGH (above 0.5) your pool may have a tendency to scale, especially inside your heater, if you have one. If the index is LOW (below -0.5), your pool will tend to corrode concrete and plaster. Contrary to most published data, a low SI does NOT indicate the likelihood of metal corrosion. Corrosion of metals is determined by pH, salinity, dissolved oxygen, and more . . . but alkalinity and calcium levels do NOT affect metal corrosion in pools.
The most important factor is pH: low pH (below 7.0) is by FAR the most common cause of severe pool damage and affects both vinyl and concrete pools. (It may not be a problem with fiberglass; I don't know.) You don't need the SI to fix your pH: FIX IT NOW!
Next, high alkalinity is a major contributor to problems, and is MORE significant in pools than the Langlier Index indicates.
I recommend the following approach, if your SI indicates problems:
The range of results reflect the uncertainty or inaccuracy in various types of tests. As explained below, precise results (like TA = 149 ppm) do NOT necessarily mean accurate results. In particular, machine readings of test strips are both VERY precise and VERY inaccurate! If one didn't have a lot of faith in the honesty and integrity of the pool chemical companies, one might be justified in supposing that this method of report test results was a deliberate attempt to deceive in order to sell more chemicals. Not everyone has that much faith in the companies, either. I, for one, do not.
Many people vaguely remember discussing "precision" vs. "accuracy" in 8th grade science. They might even remember that the two aren't quite the same thing. But, most people don't remember more than that, and the tendency is to think of "accuracy", "precision", "exactness" as all meaning, more or less, "close to the truth".
It's not quite that simple, and in order to understand testkit results, it's VERY important to understand the difference.
Using an oversimplification, you can think of "precision" as "how many numbers, not counting zeros, there are in the reading". And, you can think of accuracy as "how close to the truth the numbers LIKELY to be".
So, a TA reading of 137 ppm is more "precise" than a reading of 140, but not necessarily more accurate. Accuracy is often expressed as a plus or minus value, as in 140 ± 10. This means that the measurement was 140, but the REAL value is likely to be ANYTHING between 130 and 150, and -- this part is VERY important -- NO ONE knows whether it's 130, 133, 146 or 150, unless they perform another MORE accurate test!.
Now, here's where it get's sticky: it's possible to have a precise measurement that is not very accurate! And, not only is it possible, it happens every day!
With swimming pool teststrips, TA (Total Alkalinity) readings around 150 ppm have a accuracy range of ± 40 ppm. This means that if you test your pool water, and come up with a reading of 120 ppm, the REAL value is likely to be ANYTHING between 80 and 180 ppm. Using a computer reader changes the accuracy a little, but not much: the accuracy improves to maybe ± 30 ppm.
Here's where something very surprising happens. The computers dealers use to read teststrips are programmed to indicate readings like 117 ppm, instead of 120 ppm . . . but this does NOTHING to improve the accuracy! Even using a computer, the REAL reading is ANYWHERE between 87 and 147 ppm. Even if the computer is programed to read out 117.3 ppm, the REAL reading is STILL between between 87 and 147 ppm!!
And, it gets stranger: the PS232 testkit I sell reads TA in 10 ppm increments (usually), and has an accuracy of approximately ± 10 ppm. So, you may test and get a reading of 120 ppm or 190 ppm, but NEVER 124 ppm. However, if you get a reading of 120 ppm, you know that your REAL reading is between 130 ppm and 150 ppm.
On the other hand, if you take your water to a dealer who uses teststrips and a computer strip reader, you'll probably get a TA reading like 93 or 162 or 241. This sounds impressive, till you realize that that reading of 162 really means that your alklinity is somewhere -- and NO ONE knows just where -- between 140 and 200.
So, even though the computer read teststrips are MORE precise, they are LESS accurate than drop-count kits!!
Examples of Testing Accuracy |
||||||
| Please note that these data assume properly calibrated instruments, fresh reagents, no color-blind operators, and proper technique. In real life, results are often worse!! Dealer-only methods are indicated in red type. | ||||||
| Measurement | Method | Range | Resolution @ | Accuracy @ | ||
| 3 ppm | 10 ppm | 3 ppm | 10 ppm | |||
| Free Chlorine |
DPD-FAS drops | 0 - 50 ppm | 0.2 OR 0.5 ppm |
0.2 OR 0.5 ppm |
± 0.2 OR 0.5 ppm |
±0.2 OR 0.5 ppm |
| DPD photometric | 0 - 5 ppm | 0.5 ppm | ? | ± 0.5 ppm | ? | |
| DPD colormetric | 0 - 5 ppm | 1 ppm | ? | - 1.0 ppm; + 2.0 ppm |
? | |
| Machine read teststrip (syringaldazine) |
0 - 10 ppm | 0.1 ppm | 0.1 ppm | ± 2.0 ppm | ± 4.0 ppm | |
| Human read teststrip (syringaldazine) |
0 - 10 ppm | 5 ppm | - 5.0 ppm; + 20.0 ppm |
± 5.0 ppm | - 5.0 ppm; + 20.0 ppm |
|
| Total Alkalinity |
Method | Range | Resolution @ | Accuracy @ | ||
| 100 ppm | 300 ppm | 100 ppm | 300 ppm | |||
| Buret titration | 0 - 1000+ ppm | 3 ppm | 3 ppm | ± 5 ppm | ± 5 ppm | |
| Drop-count | 0 - 800 ppm | 10 ppm | 10 ppm | ± 15 ppm | ± 15 ppm | |
| Machine read teststrip |
0 - 240 ppm | 1 ppm | ? | ± 30 ppm | ? | |
| Human read teststrip |
0 - 240 ppm | 40 ppm | ? | ± 40 ppm | ? | |
About Us | Copyrights | Discussion Forum | Subscribe | Sitemap | Write us!
Copyright(c) PMB Webpages and Ben Powell, 1997-2001 All rights reserved