protected override void InitializeGroups()
        {
            fsParametersGroup wetMassGroup = AddGroup(fsParameterIdentifier.WetCakeMass);
            fsParametersGroup dryMassGroup = AddGroup(fsParameterIdentifier.DryCakeMass);
            fsParametersGroup cmGroup      = AddGroup(fsParameterIdentifier.SolutesMassFractionInLiquid);
            fsParametersGroup cGroup       = AddGroup(fsParameterIdentifier.SolutesConcentrationInCakeLiquid);
            fsParametersGroup rholGroup    = AddGroup(fsParameterIdentifier.LiquidDensity);
            fsParametersGroup rfGroup      = AddGroup(fsParameterIdentifier.CakeMoistureContentRf);

            var groups = new[]
            {
                wetMassGroup,
                dryMassGroup,
                cmGroup,
                cGroup,
                rholGroup,
                rfGroup
            };

            var colors = new[]
            {
                Color.FromArgb(255, 255, 230),
                Color.FromArgb(255, 230, 255)
            };

            for (int i = 0; i < groups.Length; ++i)
            {
                AddGroupToUI(dataGrid, groups[i], colors[i % colors.Length]);
                SetGroupInput(groups[i], true);
            }
            SetGroupInput(rfGroup, false);
        }
예제 #2
0
        protected override void UpdateGroupsInputInfoFromCalculationOptions()
        {
            var calculationOption            = (fsCalculationOption)CalculationOptions[typeof(fsCalculationOption)];
            fsParametersGroup calculateGroup = null;

            switch (calculationOption)
            {
            case fsCalculationOption.CalcFiltrateDensity:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.MotherLiquidDensity];
                break;

            case fsCalculationOption.CalcSolidsDensity:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.SolidsDensity];
                break;

            case fsCalculationOption.CalcSuspensionDensity:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.SuspensionDensity];
                break;

            case fsCalculationOption.CalcConcentrations:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.SuspensionSolidsMassFraction];
                break;
            }
            foreach (fsParametersGroup group in ParameterToGroup.Values)
            {
                SetGroupInput(group, group != calculateGroup);
            }
        }
예제 #3
0
        protected override void UpdateGroupsInputInfoFromCalculationOptions()
        {
            var calculationOption            = (fsCalculationOption)CalculationOptions[typeof(fsCalculationOption)];
            fsParametersGroup calculateGroup = null;

            switch (calculationOption)
            {
            case fsCalculationOption.CalcNc:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.CakeCompressibility];
                break;

            case fsCalculationOption.CalcPc0Rc0Alpha0:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.CakePermeability0];
                break;

            case fsCalculationOption.CalcPcRcAlpha:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.CakePermeability];
                break;

            case fsCalculationOption.CalcPressure:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.PressureDifference];
                break;
            }
            foreach (fsParametersGroup group in ParameterToGroup.Values)
            {
                SetGroupInput(group, group != calculateGroup);
            }
        }
예제 #4
0
        protected override void InitializeGroups()
        {
            fsParametersGroup solidsGroup = AddGroup(
                fsParameterIdentifier.SolidsDensity);
            fsParametersGroup porosityGroup = AddGroup(
                fsParameterIdentifier.CakePorosity);
            fsParametersGroup pc0Rc0A0Group = AddGroup(
                fsParameterIdentifier.CakePermeability0,
                fsParameterIdentifier.CakeResistance0,
                fsParameterIdentifier.CakeResistanceAlpha0);
            fsParametersGroup ncGroup = AddGroup(
                fsParameterIdentifier.CakeCompressibility);
            fsParametersGroup pressureGroup = AddGroup(
                fsParameterIdentifier.PressureDifference);
            fsParametersGroup pcRcAGroup = AddGroup(
                fsParameterIdentifier.CakePermeability,
                fsParameterIdentifier.CakeResistance,
                fsParameterIdentifier.CakeResistanceAlpha);

            AddGroupToUI(dataGrid, solidsGroup, Color.FromArgb(230, 230, 255));
            AddGroupToUI(dataGrid, porosityGroup, Color.FromArgb(255, 255, 230));
            AddGroupToUI(dataGrid, pc0Rc0A0Group, Color.FromArgb(230, 230, 255));
            AddGroupToUI(dataGrid, ncGroup, Color.FromArgb(255, 255, 230));
            AddGroupToUI(dataGrid, pressureGroup, Color.FromArgb(230, 230, 255));
            AddGroupToUI(dataGrid, pcRcAGroup, Color.FromArgb(255, 230, 230));
        }
예제 #5
0
        public static void ProcessCalculatorParameters(
            Dictionary <fsParameterIdentifier, fsSimulationModuleParameter> values,
            Dictionary <fsParameterIdentifier, fsParametersGroup> parameterToGroup,
            List <fsCalculator> calculators)
        {
            var localValues = new Dictionary <fsParameterIdentifier, fsCalculatorParameter>();

            foreach (fsParameterIdentifier parameter in values.Keys)
            {
                fsParametersGroup group = parameterToGroup[parameter];
                localValues[parameter] = group.GetIsInputFlag() && parameter == group.Representator
                                             ? new fsCalculatorParameter(parameter, true, values[parameter].Value)
                                             : new fsCalculatorParameter(parameter);
            }

            foreach (fsCalculator calc in calculators)
            {
                calc.ReadDataFromStorage(localValues);
                calc.Calculate();
                calc.CopyValuesToStorage(localValues);
            }

            foreach (fsParameterIdentifier parameter in values.Keys)
            {
                values[parameter].Value = localValues[parameter].Value;
            }
        }
        protected override void InitializeGroups()
        {
            fsParametersGroup wetMassGroup = AddGroup(fsParameterIdentifier.SuspensionMass);
            fsParametersGroup dryMassGroup = AddGroup(fsParameterIdentifier.DryCakeMass);
            fsParametersGroup cfmGroup     = AddGroup(fsParameterIdentifier.SolutesMassFractionInMotherLiquid);
            fsParametersGroup cfGroup      = AddGroup(fsParameterIdentifier.SolutesConcentrationInMotherLiquid);
            fsParametersGroup rhofGroup    = AddGroup(fsParameterIdentifier.MotherLiquidDensity);
            fsParametersGroup cmGroup      = AddGroup(fsParameterIdentifier.SuspensionSolidsMassFraction);

            var groups = new[]
            {
                wetMassGroup,
                dryMassGroup,
                cfmGroup,
                cfGroup,
                rhofGroup,
                cmGroup
            };

            var colors = new[]
            {
                Color.FromArgb(255, 255, 230),
                Color.FromArgb(255, 230, 255)
            };

            for (int i = 0; i < groups.Length; ++i)
            {
                AddGroupToUI(dataGrid, groups[i], colors[i % colors.Length]);
                SetGroupInput(groups[i], true);
            }
            SetGroupInput(cmGroup, false);
        }
예제 #7
0
        protected override void InitializeGroups()
        {
            fsParametersGroup filtrateGroup = AddGroup(
                fsParameterIdentifier.MotherLiquidDensity);
            fsParametersGroup densitiesGroup = AddGroup(
                fsParameterIdentifier.SolidsDensity,
                fsParameterIdentifier.SuspensionDensity);
            fsParametersGroup concentrationGroup = AddGroup(
                fsParameterIdentifier.SuspensionSolidsMassFraction,
                fsParameterIdentifier.SuspensionSolidsVolumeFraction,
                fsParameterIdentifier.SuspensionSolidsConcentration);
            fsParametersGroup epsKappaGroup = AddGroup(
                fsParameterIdentifier.CakePorosity,
                fsParameterIdentifier.Kappa);
            fsParametersGroup machineDiameterGroup = AddGroup(
                fsParameterIdentifier.MachineDiameter);

            m_areaBGroup = AddGroup(
                fsParameterIdentifier.MachineWidth,
                fsParameterIdentifier.WidthOverDiameterRatio,
                fsParameterIdentifier.FilterArea);
            fsParametersGroup diameterFilterElementGroup = AddGroup(
                fsParameterIdentifier.FilterElementDiameter);
            fsParametersGroup cakeHeightGroup = AddGroup(
                fsParameterIdentifier.CakeHeight);
            fsParametersGroup massVolumeGroup = AddGroup(
                fsParameterIdentifier.SuspensionVolume,
                fsParameterIdentifier.SuspensionMass);

            var groups = new[]
            {
                filtrateGroup,
                densitiesGroup,
                concentrationGroup,
                epsKappaGroup,
                machineDiameterGroup,
                m_areaBGroup,
                diameterFilterElementGroup,
                cakeHeightGroup,
                massVolumeGroup
            };

            var colors = new[]
            {
                Color.FromArgb(255, 255, 230),
                Color.FromArgb(255, 230, 255)
            };

            for (int i = 0; i < groups.Length; ++i)
            {
                AddGroupToUI(dataGrid, groups[i], colors[i % colors.Length]);
            }
            SetRowColor(dataGrid, ParameterToCell[fsParameterIdentifier.FilterArea].RowIndex,
                        Color.FromArgb(255, 230, 230));
            SetRowColor(dataGrid, ParameterToCell[fsParameterIdentifier.MachineWidth].RowIndex,
                        Color.FromArgb(255, 230, 230));
            SetRowColor(dataGrid, ParameterToCell[fsParameterIdentifier.WidthOverDiameterRatio].RowIndex,
                        Color.FromArgb(255, 230, 230));
        }
예제 #8
0
 public fsParametersGroup(fsParametersGroup other)
 {
     Parameters       = new List <fsParameterIdentifier>(other.Parameters);
     Representator    = other.Representator;
     IsInput          = other.IsInput;
     IsOnlyCalculated = other.IsOnlyCalculated;
     Kind             = other.Kind;
 }
예제 #9
0
        protected void UpdateInputInGroup(fsParameterIdentifier parameter)
        {
            fsParametersGroup g = ParameterToGroup[parameter];

            g.Representator = parameter;
            foreach (fsParameterIdentifier p in g.Parameters)
            {
                ParameterToCell[p].Style.ForeColor = p == parameter ? Color.Blue : Color.Black;
            }
        }
예제 #10
0
        public fsParametersGroup AddGroup(bool isOnlyCalculated, params fsParameterIdentifier[] parameters)
        {
            var group = new fsParametersGroup(isOnlyCalculated);

            foreach (fsParameterIdentifier parameter in parameters)
            {
                group.Parameters.Add(parameter);
                ParameterToGroup[parameter] = group;
            }
            group.Representator = group.Parameters[0];
            Groups.Add(group);
            return(group);
        }
예제 #11
0
        protected void SetGroupInput(fsParametersGroup group, bool value)
        {
            if (!group.GetIsOnlyCalculatedFlag())
            {
                group.SetIsInputFlag(value);
            }
            bool isReadOnly = !group.GetIsInputFlag();

            foreach (fsParameterIdentifier parameter in group.Parameters)
            {
                ParameterToCell[parameter].ReadOnly = isReadOnly;
            }
        }
예제 #12
0
        protected override void InitializeGroups()
        {
            fsParametersGroup machineDiameterGroup = AddGroup(fsParameterIdentifier.MachineDiameter);
            fsParametersGroup areaBGroup           = AddGroup(fsParameterIdentifier.MachineWidth,
                                                              fsParameterIdentifier.WidthOverDiameterRatio,
                                                              fsParameterIdentifier.FilterArea);
            fsParametersGroup filterElementDiameterGroup = AddGroup(fsParameterIdentifier.FilterElementDiameter);
            fsParametersGroup cakeHeightGroup            = AddGroup(fsParameterIdentifier.CakeHeight);
            fsParametersGroup wetGroup           = AddGroup(fsParameterIdentifier.WetCakeMass);
            fsParametersGroup dryGroup           = AddGroup(fsParameterIdentifier.DryCakeMass);
            fsParametersGroup concentrationGroup = AddGroup(fsParameterIdentifier.SolutesConcentrationInCakeLiquid);
            fsParametersGroup liquidGroup        = AddGroup(fsParameterIdentifier.LiquidDensity);
            fsParametersGroup solidsGroup        = AddGroup(fsParameterIdentifier.SolidsDensity);
            fsParametersGroup porosityGroup      = AddGroup(fsParameterIdentifier.CakePorosity);

            var groups = new[]
            {
                machineDiameterGroup,
                areaBGroup,
                filterElementDiameterGroup,
                cakeHeightGroup,
                wetGroup,
                dryGroup,
                concentrationGroup,
                liquidGroup,
                solidsGroup,
                porosityGroup
            };

            var colors = new[]
            {
                Color.FromArgb(255, 255, 230),
                Color.FromArgb(255, 230, 255)
            };

            for (int i = 0; i < groups.Length; ++i)
            {
                groups[i].SetIsInputFlag(true);
                AddGroupToUI(dataGrid, groups[i], colors[i % colors.Length]);
            }
            porosityGroup.SetIsInputFlag(false);
            ParameterToCell[fsParameterIdentifier.CakePorosity].ReadOnly = true;

            SetRowColor(dataGrid, ParameterToCell[fsParameterIdentifier.FilterArea].RowIndex,
                        Color.FromArgb(255, 230, 230));
            SetRowColor(dataGrid, ParameterToCell[fsParameterIdentifier.MachineWidth].RowIndex,
                        Color.FromArgb(255, 230, 230));
            SetRowColor(dataGrid, ParameterToCell[fsParameterIdentifier.WidthOverDiameterRatio].RowIndex,
                        Color.FromArgb(255, 230, 230));
        }
예제 #13
0
 protected void UpdateCellForeColors()
 {
     foreach (var pair in ParameterToCell)
     {
         fsParametersGroup group = ParameterToGroup[pair.Key];
         if (group.GetIsInputFlag())
         {
             pair.Value.Style.ForeColor = group.Representator == pair.Key
                                              ? Color.Blue
                                              : Color.Black;
         }
         else
         {
             pair.Value.Style.ForeColor = Color.Black;
         }
     }
 }
예제 #14
0
        protected override void InitializeGroups()
        {
            fsParametersGroup filtrateGroup = AddGroup(
                fsParameterIdentifier.MotherLiquidDensity);
            fsParametersGroup solidsGroup = AddGroup(
                fsParameterIdentifier.SolidsDensity);
            fsParametersGroup suspensionGroup = AddGroup(
                fsParameterIdentifier.SuspensionDensity);
            fsParametersGroup concentrationGroup = AddGroup(
                fsParameterIdentifier.SuspensionSolidsMassFraction,
                fsParameterIdentifier.SuspensionSolidsVolumeFraction,
                fsParameterIdentifier.SuspensionSolidsConcentration);

            AddGroupToUI(dataGrid, filtrateGroup, Color.FromArgb(230, 255, 255));
            AddGroupToUI(dataGrid, solidsGroup, Color.FromArgb(255, 230, 255));
            AddGroupToUI(dataGrid, suspensionGroup, Color.FromArgb(255, 255, 230));
            AddGroupToUI(dataGrid, concentrationGroup, Color.FromArgb(230, 230, 230));
        }
예제 #15
0
        protected override void UpdateGroupsInputInfoFromCalculationOptions()
        {
            var calculationOption            = (fsCalculationOption)CalculationOptions[typeof(fsCalculationOption)];
            fsParametersGroup calculateGroup = null;

            switch (calculationOption)
            {
            case fsCalculationOption.DensitiesCalculated:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.SolidsDensity];
                break;

            case fsCalculationOption.ConcentreationsCalculated:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.SuspensionSolidsMassFraction];
                break;

            case fsCalculationOption.PorosityKappaCalculated:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.CakePorosity];
                break;

            case fsCalculationOption.MachineDiameterCalculated:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.MachineDiameter];
                break;

            case fsCalculationOption.FilterElementDiameterCalculated:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.FilterElementDiameter];
                break;

            case fsCalculationOption.MachineAreaBCalculated:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.FilterArea];
                break;

            case fsCalculationOption.CakeHeightCalculated:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.CakeHeight];
                break;

            case fsCalculationOption.MassVolumeCalculated:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.SuspensionMass];
                break;
            }
            foreach (fsParametersGroup group in ParameterToGroup.Values)
            {
                SetGroupInput(group, group != calculateGroup);
            }
        }
예제 #16
0
 protected void AddGroupToUI(fsParametersWithValuesTable dataGrid, fsParametersGroup group, Color color)
 {
     foreach (fsParameterIdentifier identifier in group.Parameters)
     {
         if (!Values.ContainsKey(identifier))
         {
             var parameter     = new fsSimulationModuleParameter(identifier);
             var defaultRanges = fsMachineRanges.DefaultMachineRanges.Ranges;
             if (defaultRanges.ContainsKey(identifier))
             {
                 parameter.Range = fsMachineRanges.DefaultMachineRanges.Ranges[identifier].Range;
             }
             Values.Add(identifier, parameter);
             AddRow(dataGrid, parameter, color);
         }
         else
         {
             AddRow(dataGrid, Values[identifier], color);
         }
     }
 }
예제 #17
0
        protected override void InitializeGroups()
        {
            fsParametersGroup wetMassGroup = AddGroup(fsParameterIdentifier.WetCakeMass);
            fsParametersGroup liquidGroup  = AddGroup(fsParameterIdentifier.LiquidMassForResuspension);
            fsParametersGroup cwmGroup     = AddGroup(fsParameterIdentifier.LiquidWashOutMassFraction);
            fsParametersGroup rholGroup    = AddGroup(fsParameterIdentifier.LiquidDensity);
            fsParametersGroup cwGroup      = AddGroup(fsParameterIdentifier.LiquidWashOutConcentration);
            fsParametersGroup phGroup      = AddGroup(fsParameterIdentifier.Ph);
            fsParametersGroup dryMassGroup = AddGroup(fsParameterIdentifier.DryCakeMass);
            fsParametersGroup outGroup     = AddGroup(
                fsParameterIdentifier.PHcake,
                fsParameterIdentifier.CakeMoistureContentRf,
                fsParameterIdentifier.CakeWashOutContent);

            var groups = new[]
            {
                wetMassGroup,
                liquidGroup,
                rholGroup,
                cwGroup,
                cwmGroup,
                dryMassGroup,
                phGroup,
                outGroup
            };

            var colors = new[]
            {
                Color.FromArgb(255, 255, 230),
                Color.FromArgb(255, 230, 255)
            };

            for (int i = 0; i < groups.Length; ++i)
            {
                AddGroupToUI(dataGrid, groups[i], colors[i % colors.Length]);
                SetGroupInput(groups[i], true);
            }
            SetGroupInput(outGroup, false);
        }
예제 #18
0
        protected override void InitializeGroups()
        {
            fsParametersGroup permeabilityGroup = AddGroup(fsParameterIdentifier.CakePermeability);
            fsParametersGroup resistanceGroup   = AddGroup(fsParameterIdentifier.CakeResistance);
            fsParametersGroup alphaGroup        = AddGroup(fsParameterIdentifier.CakeResistanceAlpha);
            fsParametersGroup rhosGroup         = AddGroup(fsParameterIdentifier.SolidsDensity);
            fsParametersGroup epsGroup          = AddGroup(fsParameterIdentifier.CakePorosity);
            fsParametersGroup rhosBulkGroup     = AddGroup(fsParameterIdentifier.DryCakeDensity);
            fsParametersGroup sigmaGroup        = AddGroup(fsParameterIdentifier.SurfaceTensionLiquidInCake);
            fsParametersGroup pkestGroup        = AddGroup(fsParameterIdentifier.StandardCapillaryPressure);
            fsParametersGroup pkeGroup          = AddGroup(fsParameterIdentifier.CapillaryPressure);

            var groups = new[]
            {
                permeabilityGroup,
                resistanceGroup,
                alphaGroup,
                rhosGroup,
                epsGroup,
                rhosBulkGroup,
                sigmaGroup,
                pkestGroup,
                pkeGroup
            };

            var colors = new[]
            {
                Color.FromArgb(255, 255, 230),
                Color.FromArgb(255, 230, 255)
            };

            for (int i = 0; i < groups.Length; ++i)
            {
                AddGroupToUI(dataGrid, groups[i], colors[i % colors.Length]);
                SetGroupInput(groups[i], true);
            }
            SetGroupInput(pkeGroup, false);
        }
예제 #19
0
        protected override void InitializeGroups()
        {
            fsParametersGroup liquidGroup = AddGroup(
                fsParameterIdentifier.LiquidDensity);
            fsParametersGroup solidsGroup = AddGroup(
                fsParameterIdentifier.SolidsDensity);
            fsParametersGroup porosityGroup = AddGroup(
                fsParameterIdentifier.CakePorosity);
            fsParametersGroup saturationGroup = AddGroup(
                fsParameterIdentifier.CakeSaturation);
            fsParametersGroup rfGroup = AddGroup(
                fsParameterIdentifier.CakeMoistureContentRf);

            var groups = new[]
            {
                liquidGroup,
                solidsGroup,
                porosityGroup,
                saturationGroup,
                rfGroup
            };

            var colors = new[]
            {
                Color.FromArgb(255, 255, 230),
                Color.FromArgb(255, 230, 255)
            };

            for (int i = 0; i < groups.Length; ++i)
            {
                groups[i].SetIsInputFlag(true);
                AddGroupToUI(dataGrid, groups[i], colors[i % colors.Length]);
            }
            rfGroup.SetIsInputFlag(false);
            ParameterToCell[fsParameterIdentifier.CakeMoistureContentRf].ReadOnly = true;
        }
예제 #20
0
        protected override void UpdateGroupsInputInfoFromCalculationOptions()
        {
            var calculationOption            = (fsCalculationOption)CalculationOptions[typeof(fsCalculationOption)];
            fsParametersGroup calculateGroup = null;

            switch (calculationOption)
            {
            case fsCalculationOption.CakeMoistureContent:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.CakeMoistureContentRf];
                break;

            case fsCalculationOption.CakePorosity:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.CakePorosity];
                break;

            case fsCalculationOption.CakeSaturation:
                calculateGroup = ParameterToGroup[fsParameterIdentifier.CakeSaturation];
                break;
            }
            foreach (fsParametersGroup group in ParameterToGroup.Values)
            {
                SetGroupInput(group, group != calculateGroup);
            }
        }
예제 #21
0
        public fsParametersGroup AddOnlyCalculatedGroup(params fsParameterIdentifier[] parameters)
        {
            fsParametersGroup group = AddGroup(true, parameters);

            return(group);
        }
예제 #22
0
        protected override void InitializeGroups()
        {
            fsParametersGroup filtrateGroup = AddGroup(
                fsParameterIdentifier.MotherLiquidDensity);
            fsParametersGroup solidsGroup = AddGroup(
                fsParameterIdentifier.SolidsDensity,
                fsParameterIdentifier.SuspensionDensity);
            fsParametersGroup concentrationGroup = AddGroup(
                fsParameterIdentifier.SuspensionSolidsMassFraction,
                fsParameterIdentifier.SuspensionSolidsVolumeFraction,
                fsParameterIdentifier.SuspensionSolidsConcentration);
            fsParametersGroup neGroup = AddGroup(
                fsParameterIdentifier.Ne);
            fsParametersGroup ncGroup = AddGroup(
                fsParameterIdentifier.CakeCompressibility);
            fsParametersGroup epsKappaGroup = AddGroup(
                fsParameterIdentifier.CakePorosity0,
                fsParameterIdentifier.DryCakeDensity0,
                fsParameterIdentifier.Kappa0,
                fsParameterIdentifier.CakeMoistureContentRf0,
                fsParameterIdentifier.CakePorosity,
                fsParameterIdentifier.DryCakeDensity,
                fsParameterIdentifier.Kappa,
                fsParameterIdentifier.CakeMoistureContentRf);
            fsParametersGroup viscosityGroup = AddGroup(
                fsParameterIdentifier.MotherLiquidViscosity);
            fsParametersGroup pc0Rc0Alpha0Group = AddGroup(
                fsParameterIdentifier.CakePermeability0,
                fsParameterIdentifier.CakeResistance0,
                fsParameterIdentifier.CakeResistanceAlpha0,
                fsParameterIdentifier.CakePermeability,
                fsParameterIdentifier.CakeResistance,
                fsParameterIdentifier.CakeResistanceAlpha,
                fsParameterIdentifier.PracticalCakePermeability);
            fsParametersGroup hceGroup = AddGroup(
                fsParameterIdentifier.FilterMediumResistanceHce,
                fsParameterIdentifier.FilterMediumResistanceRm);
            fsParametersGroup areaGroup = AddGroup(
                fsParameterIdentifier.FilterArea);
            fsParametersGroup pressureGroup = AddGroup(
                fsParameterIdentifier.PressureDifference);
            fsParametersGroup cakeFormationGroup = AddGroup(
                fsParameterIdentifier.FiltrationTime,
                fsParameterIdentifier.CakeHeight,
                fsParameterIdentifier.SuspensionMass,
                fsParameterIdentifier.FiltrateMass,
                fsParameterIdentifier.CakeMass,
                fsParameterIdentifier.SolidsMass,
                fsParameterIdentifier.qmf,
                fsParameterIdentifier.SuspensionVolume,
                fsParameterIdentifier.FiltrateVolume,
                fsParameterIdentifier.CakeVolume,
                fsParameterIdentifier.SolidsVolume,
                fsParameterIdentifier.qf);

            var groups = new[]
            {
                viscosityGroup,
                filtrateGroup,
                solidsGroup,
                concentrationGroup,
                epsKappaGroup,
                neGroup,
                ncGroup,
                pc0Rc0Alpha0Group,
                hceGroup,
                areaGroup,
                pressureGroup,
                cakeFormationGroup,
            };

            var colors = new[]
            {
                Color.FromArgb(255, 255, 230),
                Color.FromArgb(255, 230, 255),
                Color.FromArgb(230, 255, 255)
            };

            for (int i = 0; i < groups.Length; ++i)
            {
                groups[i].SetIsInputFlag(true);
                AddGroupToUI(dataGrid, groups[i], colors[i % colors.Length]);
            }

            ParameterToCell[fsParameterIdentifier.Ne].OwningRow.Visible                     = false;
            ParameterToCell[fsParameterIdentifier.CakePorosity0].OwningRow.Visible          = false;
            ParameterToCell[fsParameterIdentifier.DryCakeDensity0].OwningRow.Visible        = false;
            ParameterToCell[fsParameterIdentifier.Kappa0].OwningRow.Visible                 = false;
            ParameterToCell[fsParameterIdentifier.CakeMoistureContentRf0].OwningRow.Visible = false;
        }