public void CalculateFogIndex()
        {
            // Based on FSI formula: fsi = 4ts - 2(t850 + tds) + w850

            var W850 = Earth.ATM.MidLevel.P.Gradient2();
            var DIV  = (Earth.ATM.MidLevel.P.Divergence()).EQ(4);

            FOG.Assign((r, c) =>
            {
                var div = DIV[r, c];
                if (div <= 0)
                {
                    var ts   = TS[r, c];
                    var t850 = Earth.ATM.MidLevel.T[r, c];
                    var w850 = W850[r, c];

                    var t = TE[r, c];

                    var hMid = Earth.ATM.MidLevel.H[r, c];
                    var hSea = Earth.ATM.SeaLevel.H[r, c];
                    var h    = 0.5f * (hMid + hSea);

                    var pMid = Earth.ATM.MidLevel.P[r, c];
                    var pSea = Earth.ATM.SeaLevel.P[r, c];
                    var dp   = (pSea - pMid) / SimConstants.LevelHeights[LevelType.MidLevel];
                    var p    = pSea - dp * Height[r, c];

                    var tds = LapseRate.DewPoint(p, t, h);

                    var fsi = 2 * (4 * ts - 2 * (t850 - tds) + w850);

                    if (fsi > 100)
                    {
                        return(100);
                    }

                    if (fsi < 0)
                    {
                        return(0);
                    }

                    return(fsi);
                }

                return(100);
            });
        }