Esempio n. 1
0
        public fsPermeabilityCalculator()
        {
            #region Parameters Initialization

            fsCalculatorConstant rhoS = AddConstant(fsParameterIdentifier.SolidsDensity);
            fsCalculatorConstant eps0 = AddConstant(fsParameterIdentifier.CakePorosity0);
            fsCalculatorConstant eps  = AddConstant(fsParameterIdentifier.CakePorosity);

            fsCalculatorConstant hc   = AddConstant(fsParameterIdentifier.CakeHeight);
            fsCalculatorConstant eta  = AddConstant(fsParameterIdentifier.MotherLiquidViscosity);
            fsCalculatorConstant hce0 = AddConstant(fsParameterIdentifier.FilterMediumResistanceHce0);

            fsCalculatorVariable nc       = AddVariable(fsParameterIdentifier.CakeCompressibility);
            fsCalculatorVariable pressure = AddVariable(fsParameterIdentifier.PressureDifference);

            fsCalculatorVariable pc0    = AddVariable(fsParameterIdentifier.CakePermeability0);
            fsCalculatorVariable rc0    = AddVariable(fsParameterIdentifier.CakeResistance0);
            fsCalculatorVariable alpha0 = AddVariable(fsParameterIdentifier.CakeResistanceAlpha0);

            fsCalculatorVariable pc    = AddVariable(fsParameterIdentifier.CakePermeability);
            fsCalculatorVariable rc    = AddVariable(fsParameterIdentifier.CakeResistance);
            fsCalculatorVariable alpha = AddVariable(fsParameterIdentifier.CakeResistanceAlpha);

            #endregion

            #region Equations Initialization

            AddEquation(new fsDivisionInverseEquation(pc0, rc0));
            AddEquation(new fsAlphaPcEquation(alpha0, pc0, eps0, rhoS));
            AddEquation(new fsFrom0AndDpEquation(pc, pc0, pressure, nc));
            AddEquation(new fsDivisionInverseEquation(pc, rc));
            AddEquation(new fsAlphaPcEquation(alpha, pc, eps, rhoS));

            #endregion
        }
        public void RebuildEquationsList()
        {
            Equations = new List <fsCalculatorEquation>();

            var zero = new fsCalculatorConstant(new fsParameterIdentifier("zero"))
            {
                IsInput = true,
                Value   = fsValue.Zero
            };

            AddEquation(new fsMoistureContentEquation(m_cakeMoistureContent, m_dryMass, m_wetMass, zero));

            if (FromCalculationOption == fsCalculationOptions.fsFromCalculationOption.WashOutContent)
            {
                if (WashOutContentOption == fsCalculationOptions.fsWashOutContentOption.AsMassFraction)
                {
                    AddEquation(new fsCakeWashOutContentEquation(m_cakeWashOutContent, m_dryMass, m_wetMass, m_liquidMassForResuspension, m_solidsMassFraction));
                }
                else
                {
                    m_internalC.IsInput = false;
                    AddEquation(new fsProductEquation(m_solidsConcentration, m_internalC, m_liquidDensity));
                    AddEquation(new fsCakeWashOutContentEquation(m_cakeWashOutContent, m_dryMass, m_wetMass, m_liquidMassForResuspension, m_internalC));
                }
            }
            else
            {
                m_internalC.IsInput = false;
                AddEquation(new fsPhCakeEquation(m_pHcake, m_pH, m_wetMass, m_dryMass, m_liquidMassForResuspension));
                AddEquation(new fsConcentrationFromPhEquation(m_internalC, m_pH, m_liquidDensity));
                AddEquation(new fsCakeWashOutContentEquation(m_cakeWashOutContent, m_dryMass, m_wetMass, m_liquidMassForResuspension, m_internalC));
            }
        }
Esempio n. 3
0
        public fsCakeFormationDpConstCalculator()
        {
            #region Parameters Initialization

            m_suspensionDensity = AddConstant(fsParameterIdentifier.SuspensionDensity);
            m_solidsDensity     = AddConstant(fsParameterIdentifier.SolidsDensity);
            m_etaf      = AddConstant(fsParameterIdentifier.MotherLiquidViscosity);
            m_hce0      = AddConstant(fsParameterIdentifier.FilterMediumResistanceHce0);
            m_porosity0 = AddConstant(fsParameterIdentifier.CakePorosity0);
            AddConstant(fsParameterIdentifier.Kappa0);
            m_pc0 = AddConstant(fsParameterIdentifier.CakePermeability0);
            m_ne  = AddConstant(fsParameterIdentifier.Ne);
            m_nc  = AddConstant(fsParameterIdentifier.CakeCompressibility);
            m_volumeConcentration = AddConstant(fsParameterIdentifier.SuspensionSolidsVolumeFraction);

            m_filterArea = AddVariable(fsParameterIdentifier.FilterArea);

            m_pressure = AddVariable(fsParameterIdentifier.PressureDifference);

            m_cycleTime       = AddVariable(fsParameterIdentifier.CycleTime);
            m_rotationalSpeed = AddVariable(fsParameterIdentifier.RotationalSpeed);

            m_formationRelativeTime  = AddVariable(fsParameterIdentifier.SpecificFiltrationTime);
            m_formationTime          = AddVariable(fsParameterIdentifier.FiltrationTime);
            m_cakeHeight             = AddVariable(fsParameterIdentifier.CakeHeight);
            m_suspensionMass         = AddVariable(fsParameterIdentifier.SuspensionMass);
            m_suspensionVolume       = AddVariable(fsParameterIdentifier.SuspensionVolume);
            m_suspensionMassFlowrate = AddVariable(fsParameterIdentifier.SuspensionMassFlowrate);

            m_porosity = AddVariable(fsParameterIdentifier.CakePorosity);
            m_pc       = AddVariable(fsParameterIdentifier.CakePermeability);
            m_rc       = AddVariable(fsParameterIdentifier.CakeResistance);
            m_alpha    = AddVariable(fsParameterIdentifier.CakeResistanceAlpha);
            m_kappa    = AddVariable(fsParameterIdentifier.Kappa);

            #endregion

            #region Equations Initialization

            AddEquation(new fsDivisionInverseEquation(m_cycleTime, m_rotationalSpeed));
            AddEquation(new fsDivisionInverseEquation(m_rotationalSpeed, m_cycleTime));
            AddEquation(new fsProductEquation(m_formationTime, m_formationRelativeTime, m_cycleTime));
            AddEquation(new fsCakeHeightFromDpTf(m_cakeHeight, m_hce0, m_pc, m_kappa, m_pressure, m_formationTime, m_etaf));
            AddEquation(new fsVsusFromAreaAndCakeHeightEquation(m_suspensionVolume, m_filterArea, m_cakeHeight, m_kappa));
            AddEquation(new fsProductEquation(m_suspensionMass, m_suspensionDensity, m_suspensionVolume));
            AddEquation(new fsFrom0AndDpEquation(m_porosity, m_porosity0, m_pressure, m_ne));
            AddEquation(new fsFrom0AndDpEquation(m_pc, m_pc0, m_pressure, m_nc));
            AddEquation(new fsEpsKappaCvEquation(m_porosity, m_kappa, m_volumeConcentration));
            AddEquation(new fsAlphaPcEquation(m_alpha, m_pc, m_porosity, m_solidsDensity));
            AddEquation(new fsDivisionInverseEquation(m_rc, m_pc));
            AddEquation(new fsProductEquation(m_suspensionMass, m_suspensionMassFlowrate, m_cycleTime));

            #endregion
        }
Esempio n. 4
0
        protected fsCalculatorConstant AddConstant(fsParameterIdentifier identifier)
        {
            var c = new fsCalculatorConstant(identifier);

            if (m_constants.ContainsKey(identifier))
            {
                throw new Exception("Parameter " + identifier.ToString() + " already exists in constants.");
            }
            m_constants[identifier] = c;
            return(c);
        }
        public fsRfFromWetDryCakeCalculator()
        {
            #region Parameters Initialization

            m_wetMass             = AddConstant(fsParameterIdentifier.WetCakeMass);
            m_dryMass             = AddConstant(fsParameterIdentifier.DryCakeMass);
            m_solidsMassFraction  = AddConstant(fsParameterIdentifier.SolutesMassFractionInLiquid);
            m_solidsConcentration = AddConstant(fsParameterIdentifier.SolutesConcentrationInCakeLiquid);
            m_liquidDensity       = AddConstant(fsParameterIdentifier.LiquidDensity);
            m_cakeMoistureContent = AddVariable(fsParameterIdentifier.CakeMoistureContentRf);
            m_internalC           = AddVariable(new fsParameterIdentifier("internalC"));

            #endregion

            Equations = null;
        }
Esempio n. 6
0
        public fsSuspensionSolidsMassFractionCalculator()
        {
            #region Parameters Initialization

            m_suspensionMass      = AddConstant(fsParameterIdentifier.SuspensionMass);
            m_dryMass             = AddConstant(fsParameterIdentifier.DryCakeMass);
            m_Cfm                 = AddConstant(fsParameterIdentifier.SolutesMassFractionInMotherLiquid);
            m_Cf                  = AddConstant(fsParameterIdentifier.SolutesConcentrationInMotherLiquid);
            m_motherLiquidDensity = AddConstant(fsParameterIdentifier.MotherLiquidDensity);
            m_Cm                  = AddVariable(fsParameterIdentifier.SuspensionSolidsMassFraction);
            m_internalC           = AddVariable(new fsParameterIdentifier("internalC"));

            #endregion

            Equations = null;
        }
Esempio n. 7
0
        public fsRm0Hce0Calculator()
        {
            #region Parameters Initialization

            m_hce0 = AddVariable(fsParameterIdentifier.FilterMediumResistanceHce0);
            m_rm0  = AddVariable(fsParameterIdentifier.FilterMediumResistanceRm0);
            m_pc0  = AddConstant(fsParameterIdentifier.CakePermeability0);

            #endregion

            #region Equations Initialization

            AddEquation(new fsProductEquation(m_hce0, m_pc0, m_rm0));

            #endregion
        }
Esempio n. 8
0
        public fsRfFromCakeSaturationCalculator()
        {
            #region Parameters Initialization

            m_liquidDensity       = AddConstant(fsParameterIdentifier.LiquidDensity);
            m_solidsDensity       = AddConstant(fsParameterIdentifier.SolidsDensity);
            m_cakePorosity        = AddVariable(fsParameterIdentifier.CakePorosity);
            m_cakeSaturation      = AddVariable(fsParameterIdentifier.CakeSaturation);
            m_cakeMoistureContent = AddVariable(fsParameterIdentifier.CakeMoistureContentRf);

            #endregion

            #region Equations Initialization

            Equations.Add(new fsMoistureContentFromCakeSaturationEquation(m_liquidDensity, m_solidsDensity, m_cakePorosity, m_cakeMoistureContent, m_cakeSaturation));

            #endregion
        }
        public fsCakeWashOutContentCalculator()
        {
            #region Parameters Initialization

            m_wetMass = AddConstant(fsParameterIdentifier.WetCakeMass);
            m_dryMass = AddConstant(fsParameterIdentifier.DryCakeMass);
            m_liquidMassForResuspension = AddConstant(fsParameterIdentifier.LiquidMassForResuspension);
            m_solidsMassFraction        = AddConstant(fsParameterIdentifier.LiquidWashOutMassFraction);
            m_solidsConcentration       = AddConstant(fsParameterIdentifier.LiquidWashOutConcentration);
            m_internalC           = AddVariable(new fsParameterIdentifier("internalC"));
            m_liquidDensity       = AddConstant(fsParameterIdentifier.LiquidDensity);
            m_cakeMoistureContent = AddVariable(fsParameterIdentifier.CakeMoistureContentRf);
            m_pH                 = AddConstant(fsParameterIdentifier.Ph);
            m_pHcake             = AddVariable(fsParameterIdentifier.PHcake);
            m_cakeWashOutContent = AddVariable(fsParameterIdentifier.CakeWashOutContent);

            #endregion

            Equations = null;
        }
Esempio n. 10
0
        public fsPkeFromPcRcCalculator()
        {
            #region Parameters Initialization

            m_pc               = AddVariable(fsParameterIdentifier.CakePermeability);
            m_rc               = AddVariable(fsParameterIdentifier.CakeResistance);
            m_alpha            = AddVariable(fsParameterIdentifier.CakeResistanceAlpha);
            m_rhos             = AddConstant(fsParameterIdentifier.SolidsDensity);
            m_eps              = AddConstant(fsParameterIdentifier.CakePorosity);
            m_rhosBulk         = AddConstant(fsParameterIdentifier.DryCakeDensity);
            m_sigma            = AddConstant(fsParameterIdentifier.SurfaceTensionLiquidInCake);
            m_pkeSt            = AddConstant(fsParameterIdentifier.StandardCapillaryPressure);
            m_pke              = AddVariable(fsParameterIdentifier.CapillaryPressure);
            m_localPc          = AddVariable(new fsParameterIdentifier("local Pc"));
            m_localBulk        = AddVariable(new fsParameterIdentifier("local Bulk"));
            m_localOneMinusEps = AddVariable(new fsParameterIdentifier("1 - eps"));

            #endregion

            Equations = null;
        }
Esempio n. 11
0
        public fsCakePorosityCalculator()
        {
            #region Parameters Initialization

            m_machineArea           = AddVariable(fsParameterIdentifier.FilterArea);
            m_machineDiameter       = AddVariable(fsParameterIdentifier.MachineDiameter);
            m_filterElementDiameter = AddVariable(fsParameterIdentifier.FilterElementDiameter);
            m_cakeArea    = AddVariable(new fsParameterIdentifier("cakeArea"));
            m_b           = AddVariable(fsParameterIdentifier.MachineWidth);
            m_bOverD      = AddVariable(fsParameterIdentifier.WidthOverDiameterRatio);
            m_rhoL        = AddConstant(fsParameterIdentifier.LiquidDensity);
            m_rhoS        = AddConstant(fsParameterIdentifier.SolidsDensity);
            m_cakeHeight  = AddConstant(fsParameterIdentifier.CakeHeight);
            m_wetCakeMass = AddConstant(fsParameterIdentifier.WetCakeMass);
            m_dryCakeMass = AddConstant(fsParameterIdentifier.DryCakeMass);
            m_c           = AddConstant(fsParameterIdentifier.SolutesConcentrationInCakeLiquid);
            m_eps         = AddVariable(fsParameterIdentifier.CakePorosity);

            #endregion

            Equations = null;
        }
        public fsBeltFiltersWithReversibleTraysCalculator()
        {
            #region Parameters Initialization

            IEquationParameter etaf   = AddConstant(fsParameterIdentifier.MotherLiquidViscosity);
            IEquationParameter rhoS   = AddConstant(fsParameterIdentifier.SolidsDensity);
            IEquationParameter rhoF   = AddConstant(fsParameterIdentifier.MotherLiquidDensity);
            IEquationParameter rhoSus = AddConstant(fsParameterIdentifier.SuspensionDensity);
            IEquationParameter cv     = AddConstant(fsParameterIdentifier.SuspensionSolidsVolumeFraction);
            IEquationParameter cm     = AddConstant(fsParameterIdentifier.SuspensionSolidsMassFraction);
            IEquationParameter pc0    = AddConstant(fsParameterIdentifier.CakePermeability0);
            IEquationParameter nc     = AddConstant(fsParameterIdentifier.CakeCompressibility);
            IEquationParameter hce0   = AddConstant(fsParameterIdentifier.FilterMediumResistanceHce0);
            IEquationParameter lambda = AddConstant(fsParameterIdentifier.lambda);

            IEquationParameter rhoCd = AddConstant(fsParameterIdentifier.DryCakeDensity);
            IEquationParameter eps   = AddConstant(fsParameterIdentifier.CakePorosity);
            IEquationParameter kappa = AddConstant(fsParameterIdentifier.Kappa);

            IEquationParameter ns    = AddVariable(fsParameterIdentifier.ns);
            IEquationParameter Qms   = AddVariable(fsParameterIdentifier.Qms);
            IEquationParameter Qs    = AddVariable(fsParameterIdentifier.Qs);
            IEquationParameter Qmsus = AddVariable(fsParameterIdentifier.SuspensionMassFlowrate);
            IEquationParameter Qsus  = AddVariable(fsParameterIdentifier.Qsus);

            IEquationParameter ls      = AddVariable(fsParameterIdentifier.ls);
            IEquationParameter lOverB  = AddVariable(fsParameterIdentifier.l_over_b);
            IEquationParameter lsOverB = AddVariable(fsParameterIdentifier.ls_over_b);

            IEquationParameter u   = AddVariable(fsParameterIdentifier.u);
            IEquationParameter n   = AddVariable(fsParameterIdentifier.RotationalSpeed);
            IEquationParameter tc  = AddVariable(fsParameterIdentifier.CycleTime);
            IEquationParameter nsf = AddVariable(fsParameterIdentifier.nsf);
            IEquationParameter nsr = AddVariable(fsParameterIdentifier.nsr);
            IEquationParameter sf  = AddVariable(fsParameterIdentifier.SpecificFiltrationTime);
            IEquationParameter sr  = AddVariable(fsParameterIdentifier.SpecificResidualTime);
            IEquationParameter tr  = AddVariable(fsParameterIdentifier.ResidualTime);

            IEquationParameter cakeHeigth     = AddVariable(fsParameterIdentifier.CakeHeight);
            IEquationParameter filtrationTime = AddVariable(fsParameterIdentifier.FiltrationTime);

            IEquationParameter pressureDifference = AddVariable(fsParameterIdentifier.PressureDifference);

            IEquationParameter pc = AddVariable(fsParameterIdentifier.CakePermeability);

            IEquationParameter ttech0 = AddVariable(fsParameterIdentifier.StandardTechnicalTime);
            IEquationParameter ttech  = AddVariable(fsParameterIdentifier.TechnicalTime);

            IEquationParameter filterArea   = AddVariable(fsParameterIdentifier.FilterArea);
            IEquationParameter filterAreaAs = AddVariable(fsParameterIdentifier.As);
            IEquationParameter machineWidth = AddVariable(fsParameterIdentifier.MachineWidth);
            IEquationParameter filterLength = AddVariable(fsParameterIdentifier.FilterLength);

            IEquationParameter qft  = AddVariable(fsParameterIdentifier.qft);
            IEquationParameter qmft = AddVariable(fsParameterIdentifier.qmft);

            #region Help Parameters and Constants

            var constantOne = new fsCalculatorConstant(new fsParameterIdentifier("1"))
            {
                Value = fsValue.One
            };
            var constantTwo = new fsCalculatorConstant(new fsParameterIdentifier("1"))
            {
                Value = new fsValue(2)
            };

            IEquationParameter hcAddHce = AddVariable(new fsParameterIdentifier("hc + hce"));
            Equations.Add(new fsSumEquation(hcAddHce, cakeHeigth, hce0));

            IEquationParameter hcAdd2Hce = AddVariable(new fsParameterIdentifier("hc + 2 hce"));
            Equations.Add(new fsSumEquation(hcAdd2Hce, hcAddHce, hce0));

            IEquationParameter oneMinusEps = AddVariable(new fsParameterIdentifier("1 - eps"));
            Equations.Add(new fsSumEquation(constantOne, eps, oneMinusEps));

            #endregion

            #endregion

            #region Equations Initialization

            Equations.Add(new fsAreaOfBeltWithReversibleTraysEquation(filterArea, lsOverB, ns, Qms, rhoCd, u, cakeHeigth));

            Equations.Add(new fsProductEquation(Qms, rhoS, Qs));
            Equations.Add(new fsProductEquation(Qmsus, rhoSus, Qsus));
            Equations.Add(new fsProductEquation(Qs, Qsus, cv));
            Equations.Add(new fsProductsEquation(
                              new[] { ls, rhoCd, u, cakeHeigth },
                              new[] { lsOverB, Qms }));
            Equations.Add(new fsProductsEquation(
                              new[] { Qms, tc },
                              new[] { rhoCd, filterArea, cakeHeigth }));
            Equations.Add(new fsProductEquation(lOverB, ns, lsOverB));
            Equations.Add(new fsProductEquation(nsf, ns, sf));
            Equations.Add(new fsFrom0AndDpEquation(pc, pc0, pressureDifference, nc));
            Equations.Add(new fsTechnicalTimeFrom0Equation(ttech, ttech0, filterAreaAs, lambda));
            Equations.Add(new fsProductEquation(filterArea, filterLength, machineWidth));
            Equations.Add(new fsProductsEquation(
                              new[] { filterAreaAs, lsOverB },
                              new[] { ls, ls }));
            Equations.Add(new fsProductsEquation(
                              new[] { filterArea },
                              new[] { lOverB, machineWidth, machineWidth }));
            Equations.Add(new fsProductEquation(filterLength, ns, ls));
            Equations.Add(new fsProductEquation(filterLength, tc, u));
            Equations.Add(new fsDivisionInverseEquation(tc, n));
            Equations.Add(new fsCakeHeightFromDpTf(cakeHeigth, hce0, pc, kappa, pressureDifference, filtrationTime, etaf));
            Equations.Add(new fsSumEquation(ns, nsf, nsr));
            Equations.Add(new fsSumEquation(tc, tr, filtrationTime));
            Equations.Add(new fsSumEquation(constantOne, sr, sf));
            Equations.Add(new fsTrSrTtechNsTcEquation(sr, tr, tc, ns, ttech));
            Equations.Add(new fsTfSfTtechNsTcEquation(sf, filtrationTime, tc, ns, ttech));
            Equations.Add(new fsProductEquation(ls, lsOverB, machineWidth));
            Equations.Add(new fsSfFromEtafHcHceKappaPcDpNsLsUTtechEquation(
                              sf, etaf, cakeHeigth, hce0, kappa, pc, pressureDifference, ns, ls, u, ttech));
            Equations.Add(new fsUFromLsOverBQmsHcDpTtech0LambdaNsfMaterialEquation(
                              u, lambda, nsf, lsOverB, Qms, rhoCd, cakeHeigth, etaf, hce0, kappa, pc, pressureDifference, ttech0));
            Equations.Add(new fsProductsEquation(
                              new[] { qft, etaf, hcAdd2Hce },
                              new[] { constantTwo, pc, pressureDifference }));
            Equations.Add(new fsProductEquation(qmft, qft, rhoF));
            Equations.Add(new fsHcQmsEquation(cakeHeigth, Qms, filterArea, rhoCd, hce0, ns, ttech, kappa, pc, pressureDifference, sf, etaf));

            #region Only Calculated Parameters

            IEquationParameter meanHeightRate = AddVariable(fsParameterIdentifier.MeanHeightRate);
            IEquationParameter hcOverTc       = AddVariable(fsParameterIdentifier.HcOverTc);
            IEquationParameter diffHeightrate = AddVariable(fsParameterIdentifier.DiffHeightRate);
            Equations.Add(new fsProductEquation(cakeHeigth, filtrationTime, meanHeightRate));
            Equations.Add(new fsProductEquation(cakeHeigth, tc, hcOverTc));
            Equations.Add(new fsProductsEquation(
                              new[] { diffHeightrate, etaf, hcAddHce },
                              new[] { kappa, pressureDifference, pc }));

            IEquationParameter Ms   = AddVariable(fsParameterIdentifier.SolidsMass);
            IEquationParameter Vs   = AddVariable(fsParameterIdentifier.SolidsVolume);
            IEquationParameter Msus = AddVariable(fsParameterIdentifier.SuspensionMass);
            IEquationParameter Vsus = AddVariable(fsParameterIdentifier.SuspensionVolume);
            Equations.Add(new fsProductsEquation(
                              new[] { Ms },
                              new[] { rhoCd, filterArea, cakeHeigth }));
            Equations.Add(new fsProductEquation(Ms, Msus, cm));
            Equations.Add(new fsProductEquation(Ms, Vs, rhoS));
            Equations.Add(new fsProductEquation(Vs, Vsus, cv));

            IEquationParameter msus = AddVariable(fsParameterIdentifier.SpecificSuspensionMass);
            IEquationParameter vsus = AddVariable(fsParameterIdentifier.SpecificSuspensionVolume);
            Equations.Add(new fsProductEquation(Msus, msus, filterArea));
            Equations.Add(new fsProductEquation(Vsus, vsus, filterArea));

            IEquationParameter qmsusd = AddVariable(fsParameterIdentifier.qmsusd);
            IEquationParameter qsusd  = AddVariable(fsParameterIdentifier.qsusd);
            IEquationParameter Qmsusd = AddVariable(fsParameterIdentifier.Qmsusd);
            IEquationParameter Qsusd  = AddVariable(fsParameterIdentifier.Qsusd);
            Equations.Add(new fsProductsEquation(
                              new[] { qsusd, cv },
                              new[] { oneMinusEps, diffHeightrate }));
            Equations.Add(new fsProductsEquation(
                              new[] { qmsusd, cv },
                              new[] { rhoCd, diffHeightrate }));
            Equations.Add(new fsProductEquation(Qmsusd, qmsusd, filterArea));
            Equations.Add(new fsProductEquation(Qsusd, qsusd, filterArea));

            IEquationParameter qmsust = AddVariable(fsParameterIdentifier.qmsust);
            IEquationParameter qsust  = AddVariable(fsParameterIdentifier.qsust);
            IEquationParameter Qmsust = AddVariable(fsParameterIdentifier.Qmsust);
            IEquationParameter Qsust  = AddVariable(fsParameterIdentifier.Qsust);
            Equations.Add(new fsProductsEquation(
                              new[] { qmsust, cv },
                              new[] { oneMinusEps, meanHeightRate }));
            Equations.Add(new fsProductEquation(qmsust, rhoSus, qsust));
            Equations.Add(new fsProductEquation(Qmsust, qmsust, filterArea));
            Equations.Add(new fsProductEquation(Qsust, qsust, filterArea));

            #endregion

            #endregion
        }
Esempio n. 13
0
        public fsPorosityCalculator()
        {
            #region Parameters Initialization

            fsCalculatorConstant ne = AddConstant(fsParameterIdentifier.Ne);
            fsCalculatorConstant pressureDifference  = AddConstant(fsParameterIdentifier.PressureDifference);
            fsCalculatorConstant volumeConcentration = AddConstant(fsParameterIdentifier.SuspensionSolidsVolumeFraction);
            fsCalculatorConstant solidsDensity       = AddConstant(fsParameterIdentifier.SolidsDensity);
            fsCalculatorConstant filtrateDensity     = AddConstant(fsParameterIdentifier.MotherLiquidDensity);
            fsCalculatorConstant solidsMass          = AddConstant(fsParameterIdentifier.SolidsMass);
            fsCalculatorConstant filtrationArea      = AddConstant(fsParameterIdentifier.FilterArea);
            fsCalculatorConstant cakeHight           = AddConstant(fsParameterIdentifier.CakeHeight);
            fsCalculatorConstant fitrationTime       = AddConstant(fsParameterIdentifier.FiltrationTime);
            fsCalculatorConstant qf       = AddConstant(fsParameterIdentifier.qf);
            fsCalculatorConstant mf       = AddConstant(fsParameterIdentifier.FiltrateMass);
            fsCalculatorConstant cakeMass = AddConstant(fsParameterIdentifier.CakeMass);

            fsCalculatorVariable porosity0             = AddVariable(fsParameterIdentifier.CakePorosity0);
            fsCalculatorVariable kappa0                = AddVariable(fsParameterIdentifier.Kappa0);
            fsCalculatorVariable cakeDrySolidsDensity0 = AddVariable(fsParameterIdentifier.DryCakeDensity0);

            fsCalculatorVariable porosity             = AddVariable(fsParameterIdentifier.CakePorosity);
            fsCalculatorVariable kappa                = AddVariable(fsParameterIdentifier.Kappa);
            fsCalculatorVariable cakeDrySolidsDensity = AddVariable(fsParameterIdentifier.DryCakeDensity);

            fsCalculatorVariable cakeWetDensity0              = AddVariable(fsParameterIdentifier.CakeWetDensity0);
            fsCalculatorVariable cakeMoistureContentRf0       = AddVariable(fsParameterIdentifier.CakeMoistureContentRf0);
            fsCalculatorVariable cakeWetMassSolidsFractionRs0 = AddVariable(fsParameterIdentifier.CakeWetMassSolidsFractionRs0);

            fsCalculatorVariable cakeWetDensity              = AddVariable(fsParameterIdentifier.CakeWetDensity);
            fsCalculatorVariable cakeMoistureContentRf       = AddVariable(fsParameterIdentifier.CakeMoistureContentRf);
            fsCalculatorVariable cakeWetMassSolidsFractionRs = AddVariable(fsParameterIdentifier.CakeWetMassSolidsFractionRs);

            #endregion

            #region Equations Initialization

            var one = new fsCalculatorConstant(new fsParameterIdentifier("one"))
            {
                Value = fsValue.One
            };

            AddEquation(new fsEpsKappaCvEquation(porosity0, kappa0, volumeConcentration));
            AddEquation(new fsCakeDrySolidsDensityEquation(cakeDrySolidsDensity0, porosity0, solidsDensity));

            AddEquation(new fsEpsKappaCvEquation(porosity, kappa, volumeConcentration));
            AddEquation(new fsCakeDrySolidsDensityEquation(cakeDrySolidsDensity, porosity, solidsDensity));

            AddEquation(new fsFrom0AndDpEquation(porosity, porosity0, pressureDifference, ne));

            AddEquation(new fsMoistureContentFromDensitiesAndPorosityEquation(cakeMoistureContentRf0, porosity0, filtrateDensity, solidsDensity));
            AddEquation(new fsSumEquation(one, cakeMoistureContentRf0, cakeWetMassSolidsFractionRs0));
            AddEquation(new fsCakeWetDensityFromRhofRhosPorosityEquation(cakeWetDensity0, filtrateDensity, solidsDensity, porosity0));

            AddEquation(new fsMoistureContentFromDensitiesAndPorosityEquation(cakeMoistureContentRf, porosity, filtrateDensity, solidsDensity));
            AddEquation(new fsSumEquation(one, cakeMoistureContentRf, cakeWetMassSolidsFractionRs));
            AddEquation(new fsCakeWetDensityFromRhofRhosPorosityEquation(cakeWetDensity, filtrateDensity, solidsDensity, porosity));

            AddEquation(new fsEpsFromMsAndHcEquation(porosity, solidsMass, filtrationArea, solidsDensity, cakeHight));
            AddEquation(new fsEpsFromMsAndQfEquation(porosity, volumeConcentration, solidsMass, filtrationArea, solidsDensity, fitrationTime, qf));
            AddEquation(new fsEpsFromMsAndMfEquation(porosity, volumeConcentration, solidsMass, filtrateDensity, solidsDensity, mf));
            AddEquation(new fsEpsFromMcAndQfEquation(porosity, volumeConcentration, cakeMass, filtrationArea, filtrateDensity, solidsDensity, fitrationTime, qf));

            #endregion
        }
Esempio n. 14
0
        public fsAnalysisFiltrationCalculator()
        {
            #region Parameters Initialization

            IEquationParameter cv = AddConstant(fsParameterIdentifier.SuspensionSolidsVolumeFraction);

            IEquationParameter c  = AddConstant(fsParameterIdentifier.SuspensionSolidsConcentration);
            IEquationParameter tc = AddVariable(fsParameterIdentifier.CycleTime);

            IEquationParameter rho            = AddConstant(fsParameterIdentifier.MotherLiquidDensity);
            IEquationParameter viscosity      = AddConstant(fsParameterIdentifier.MotherLiquidViscosity);
            IEquationParameter area           = AddConstant(fsParameterIdentifier.FilterArea);
            IEquationParameter rhosus         = AddConstant(fsParameterIdentifier.SuspensionDensity);
            IEquationParameter solidsDensity  = AddConstant(fsParameterIdentifier.SolidsDensity);
            IEquationParameter cm             = AddConstant(fsParameterIdentifier.SuspensionSolidsMassFraction);
            IEquationParameter pc             = AddVariable(fsParameterIdentifier.CakePermeability);
            IEquationParameter hc             = AddVariable(fsParameterIdentifier.CakeHeight);
            IEquationParameter formationTime  = AddVariable(fsParameterIdentifier.FiltrationTime);
            IEquationParameter solidsMass     = AddVariable(fsParameterIdentifier.SolidsMassInSuspension);
            IEquationParameter liquidMass     = AddVariable(fsParameterIdentifier.LiquidMassInSuspension);
            IEquationParameter suspensionMass = AddVariable(fsParameterIdentifier.SuspensionMass);
            IEquationParameter Rm             = AddVariable(fsParameterIdentifier.FilterMediumResistanceRm);
            IEquationParameter mf             = AddVariable(fsParameterIdentifier.FiltrateMass);
            IEquationParameter mc             = AddVariable(fsParameterIdentifier.CakeMass);
            IEquationParameter ms             = AddVariable(fsParameterIdentifier.SolidsMass);
            IEquationParameter qmf            = AddVariable(fsParameterIdentifier.qmf);
            IEquationParameter vsus           = AddVariable(fsParameterIdentifier.SuspensionVolume);
            IEquationParameter vf             = AddVariable(fsParameterIdentifier.FiltrateVolume);
            IEquationParameter vc             = AddVariable(fsParameterIdentifier.CakeVolume);
            IEquationParameter vs             = AddVariable(fsParameterIdentifier.SolidsVolume);
            IEquationParameter qf             = AddVariable(fsParameterIdentifier.qf);
            IEquationParameter hce            = AddVariable(fsParameterIdentifier.FilterMediumResistanceHce);
            IEquationParameter K = AddVariable(fsParameterIdentifier.PracticalCakePermeability);

            IEquationParameter rc0    = AddVariable(fsParameterIdentifier.CakeResistance0);
            IEquationParameter pc0    = AddVariable(fsParameterIdentifier.CakePermeability0);
            IEquationParameter alpha0 = AddVariable(fsParameterIdentifier.CakeResistanceAlpha0);
            IEquationParameter rc     = AddVariable(fsParameterIdentifier.CakeResistance);
            IEquationParameter alpha  = AddVariable(fsParameterIdentifier.CakeResistanceAlpha);
            IEquationParameter nc     = AddVariable(fsParameterIdentifier.CakeCompressibility);
            IEquationParameter Dp     = AddVariable(fsParameterIdentifier.PressureDifference);

            IEquationParameter Qms       = AddVariable(fsParameterIdentifier.Qms);
            IEquationParameter Qsus      = AddVariable(fsParameterIdentifier.Qsus);
            IEquationParameter Qmsus     = AddVariable(fsParameterIdentifier.SuspensionMassFlowrate);
            IEquationParameter pcstar    = AddVariable(fsParameterIdentifier.CakePlusMediumPermeability);
            IEquationParameter rcstar    = AddVariable(fsParameterIdentifier.CakePlusMediumResistance);
            IEquationParameter alphastar = AddVariable(fsParameterIdentifier.CakePlusMediumResistanceAlpha);

            IEquationParameter ne = AddConstant(fsParameterIdentifier.Ne);

            IEquationParameter eps     = AddVariable(fsParameterIdentifier.CakePorosity);
            IEquationParameter eps0    = AddVariable(fsParameterIdentifier.CakePorosity0);
            IEquationParameter kappa   = AddVariable(fsParameterIdentifier.Kappa);
            IEquationParameter kappa0  = AddVariable(fsParameterIdentifier.Kappa0);
            IEquationParameter rho_cd  = AddVariable(fsParameterIdentifier.DryCakeDensity);
            IEquationParameter rho_cd0 = AddVariable(fsParameterIdentifier.DryCakeDensity0);
            IEquationParameter Rf      = AddVariable(fsParameterIdentifier.CakeMoistureContentRf);
            IEquationParameter Rf0     = AddVariable(fsParameterIdentifier.CakeMoistureContentRf0);

            IEquationParameter n  = AddVariable(fsParameterIdentifier.RotationalSpeed);
            IEquationParameter tr = AddVariable(fsParameterIdentifier.ResidualTime);
            IEquationParameter sf = AddVariable(fsParameterIdentifier.SpecificFiltrationTime);

            #endregion

            #region Help Parameters

            var constantOne = new fsCalculatorConstant(new fsParameterIdentifier("1"))
            {
                Value = fsValue.One
            };
            var constantTwo = new fsCalculatorConstant(new fsParameterIdentifier("2"))
            {
                Value = new fsValue(2)
            };

            IEquationParameter onePlusKappa = AddVariable(new fsParameterIdentifier("1 + kappa"));
            Equations.Add(new fsSumEquation(onePlusKappa, constantOne, kappa));
            IEquationParameter oneMinusEps = AddVariable(new fsParameterIdentifier("1 - eps"));
            Equations.Add(new fsSumEquation(constantOne, oneMinusEps, eps));
            IEquationParameter hcPlusTwoTimesHce = AddVariable(new fsParameterIdentifier("hc+ 2*hce"));
            Equations.Add(new fsSumsEquation(
                              new[] { hcPlusTwoTimesHce },
                              new[] { hc, hce, hce }));

            #endregion

            #region Equations Initialization

            #region Porosity Equations

            AddEquation(new fsEpsKappaCvEquation(eps0, kappa0, cv));
            AddEquation(new fsCakeDrySolidsDensityEquation(rho_cd0, eps0, solidsDensity));

            AddEquation(new fsEpsKappaCvEquation(eps, kappa, cv));
            AddEquation(new fsCakeDrySolidsDensityEquation(rho_cd, eps, solidsDensity));

            AddEquation(new fsFrom0AndDpEquation(eps, eps0, Dp, ne));

            AddEquation(new fsMoistureContentFromDensitiesAndPorosityEquation(Rf0, eps0, rho, solidsDensity));

            AddEquation(new fsMoistureContentFromDensitiesAndPorosityEquation(Rf, eps, rho, solidsDensity));

            AddEquation(new fsEpsFromMsAndHcEquation(eps, solidsMass, area, solidsDensity, hc));
            AddEquation(new fsEpsFromMsAndQfEquation(eps, cv, solidsMass, area, solidsDensity, formationTime, qf));
            AddEquation(new fsEpsFromMsAndMfEquation(eps, cv, solidsMass, formationTime, solidsDensity, mf));
            AddEquation(new fsEpsFromMcAndQfEquation(eps, cv, mc, area, rho, solidsDensity, formationTime, qf));

            #endregion

            #region Cake Hight Equations

            AddEquation(new fsFrom0AndDpEquation(pc, pc0, Dp, nc));
            AddEquation(new fsCakeHeightFromDpTf(hc, hce, pc, kappa0, Dp, formationTime, viscosity));
            AddEquation(new fsHcFromMsAndPcstarEquation(hc, ms, area, solidsDensity, cv, Dp, formationTime, pcstar, viscosity));
            AddEquation(new fsHcFromMcAndPcstarEquation(hc, mc, area, solidsDensity, cv, Dp, formationTime, pcstar, rho, viscosity));
            AddEquation(new fsHcFromMsAndAlphastarEquation(hc, ms, area, solidsDensity, cv, Dp, formationTime, alphastar, viscosity));
            AddEquation(new fsHcFromMcAndAlphastarEquations(hc, mc, area, solidsDensity, cv, Dp, formationTime, alphastar, viscosity, rho));

            Equations.Add(new fsProductsEquation(
                              new[] { oneMinusEps, solidsDensity, area, hc },
                              new[] { cm, suspensionMass }));

            AddEquation(new fsProductEquation(solidsMass, suspensionMass, cm));
            AddEquation(new fsSumEquation(suspensionMass, solidsMass, liquidMass));
            AddEquation(new fsMcFromHcEquation(mc, area, hc, solidsDensity, eps, rho));
            Equations.Add(new fsProductsEquation(
                              new[] { qmf, viscosity, hcPlusTwoTimesHce },
                              new[] { rho, constantTwo, pc, Dp }));
            Equations.Add(new fsProductsEquation(
                              new[] { qf, viscosity, hcPlusTwoTimesHce },
                              new[] { constantTwo, pc, Dp }));

            Equations.Add(new fsProductsEquation(
                              new[] { area, hc, onePlusKappa },
                              new[] { vsus, kappa }));
            Equations.Add(new fsProductEquation(hce, pc, Rm));
            Equations.Add(new fsProductsEquation(
                              new[] { suspensionMass, kappa },
                              new[] { rhosus, area, hc, onePlusKappa }));
            Equations.Add(new fsProductsEquation(
                              new[] { mf, kappa },
                              new[] { rho, area, hc }));
            Equations.Add(new fsProductsEquation(
                              new[] { ms },
                              new[] { area, hc, solidsDensity, oneMinusEps }));
            Equations.Add(new fsProductsEquation(
                              new[] { vf, kappa },
                              new[] { area, hc }));
            Equations.Add(new fsProductEquation(vc, area, hc));
            Equations.Add(new fsProductsEquation(
                              new[] { vs },
                              new[] { area, hc, oneMinusEps }));

            AddEquation(new fsDivisionInverseEquation(pc0, rc0));
            AddEquation(new fsAlphaPcEquation(alpha0, pc0, eps0, solidsDensity));
            AddEquation(new fsFrom0AndDpEquation(pc, pc0, Dp, nc));
            AddEquation(new fsDivisionInverseEquation(pc, rc));
            AddEquation(new fsAlphaPcEquation(alpha, pc, eps, solidsDensity));

            AddEquation(new fsProductEquation(ms, c, vsus));
            AddEquation(new fsProductEquation(ms, cm, suspensionMass));
            AddEquation(new fsProductEquation(ms, solidsDensity, vs));
            AddEquation(new fsProductEquation(ms, tc, Qms));
            Equations.Add(new fsProductsEquation(
                              new[] { ms },
                              new[] { tc, c, Qsus }));
            Equations.Add(new fsProductsEquation(
                              new[] { ms },
                              new[] { tc, cm, Qmsus }));
            Equations.Add(new fsProductsEquation(
                              new[] { qf, kappa, formationTime },
                              new[] { hc }));
            Equations.Add(new fsProductEquation(qmf, rho, qf));
            Equations.Add(new fsProductsEquation(
                              new[] { qf, area, rho, formationTime },
                              new[] { mf }));
            Equations.Add(new fsProductsEquation(
                              new[] { qmf, area, formationTime },
                              new[] { mf }));
            Equations.Add(new fsProductsEquation(
                              new[] { qf, area, formationTime },
                              new[] { vf }));
            Equations.Add(new fsProductsEquation(
                              new[] { qmf, area, formationTime },
                              new[] { vf, rho }));

            Equations.Add(new fsProductsEquation(
                              new[] { pcstar, constantTwo, Dp },
                              new[] { viscosity, kappa, formationTime, qf, qf }));
            Equations.Add(new fsProductsEquation(
                              new[] { pcstar, constantTwo, Dp, kappa, formationTime },
                              new[] { viscosity, hc, hc }));

            Equations.Add(new fsProductEquation(constantOne, rcstar, pcstar));
            Equations.Add(new fsProductsEquation(
                              new[] { alphastar, rho_cd, pcstar },
                              new[] { constantOne }));
            AddEquation(new fsPcFromPcstarEquation(pc, hc, hce, pcstar));
            Equations.Add(new fsProductEquation(pcstar, K, viscosity));

            #endregion

            #region Time Equations

            Equations.Add(new fsDivisionInverseEquation(n, tc));
            Equations.Add(new fsSumEquation(tc, tr, formationTime));
            Equations.Add(new fsProductEquation(formationTime, tc, sf));

            #endregion

            #endregion
        }
        public fsLaboratoryFiltrationCalculator()
        {
            #region Parameters Initialization

            IEquationParameter rho           = AddConstant(fsParameterIdentifier.MotherLiquidDensity);
            IEquationParameter eps           = AddConstant(fsParameterIdentifier.CakePorosity);
            IEquationParameter viscosity     = AddConstant(fsParameterIdentifier.MotherLiquidViscosity);
            IEquationParameter kappa0        = AddConstant(fsParameterIdentifier.Kappa0);
            IEquationParameter area          = AddConstant(fsParameterIdentifier.FilterArea);
            IEquationParameter rhosus        = AddConstant(fsParameterIdentifier.SuspensionDensity);
            IEquationParameter eps0          = AddConstant(fsParameterIdentifier.CakePorosity0);
            IEquationParameter solidsDensity = AddConstant(fsParameterIdentifier.SolidsDensity);
            IEquationParameter cm            = AddConstant(fsParameterIdentifier.SuspensionSolidsMassFraction);
            IEquationParameter kappa         = AddConstant(fsParameterIdentifier.Kappa);

            IEquationParameter pc0    = AddVariable(fsParameterIdentifier.CakePermeability0);
            IEquationParameter rc0    = AddVariable(fsParameterIdentifier.CakeResistance0);
            IEquationParameter alpha0 = AddVariable(fsParameterIdentifier.CakeResistanceAlpha0);
            IEquationParameter pc     = AddVariable(fsParameterIdentifier.CakePermeability);
            IEquationParameter rc     = AddVariable(fsParameterIdentifier.CakeResistance);
            IEquationParameter alpha  = AddVariable(fsParameterIdentifier.CakeResistanceAlpha);
            IEquationParameter nc     = AddVariable(fsParameterIdentifier.CakeCompressibility);
            IEquationParameter Dp     = AddVariable(fsParameterIdentifier.PressureDifference);

            IEquationParameter hc             = AddVariable(fsParameterIdentifier.CakeHeight);
            IEquationParameter formationTime  = AddVariable(fsParameterIdentifier.FiltrationTime);
            IEquationParameter solidsMass     = AddVariable(fsParameterIdentifier.SolidsMassInSuspension);
            IEquationParameter liquidMass     = AddVariable(fsParameterIdentifier.LiquidMassInSuspension);
            IEquationParameter suspensionMass = AddVariable(fsParameterIdentifier.SuspensionMass);
            IEquationParameter Rm             = AddVariable(fsParameterIdentifier.FilterMediumResistanceRm);
            IEquationParameter Mf             = AddVariable(fsParameterIdentifier.FiltrateMass);
            IEquationParameter mc             = AddVariable(fsParameterIdentifier.CakeMass);
            IEquationParameter ms             = AddVariable(fsParameterIdentifier.SolidsMass);
            IEquationParameter qmf            = AddVariable(fsParameterIdentifier.qmf);
            IEquationParameter vsus           = AddVariable(fsParameterIdentifier.SuspensionVolume);
            IEquationParameter vf             = AddVariable(fsParameterIdentifier.FiltrateVolume);
            IEquationParameter vc             = AddVariable(fsParameterIdentifier.CakeVolume);
            IEquationParameter vs             = AddVariable(fsParameterIdentifier.SolidsVolume);
            IEquationParameter qf             = AddVariable(fsParameterIdentifier.qf);
            IEquationParameter hce            = AddVariable(fsParameterIdentifier.FilterMediumResistanceHce);
            IEquationParameter K = AddVariable(fsParameterIdentifier.PracticalCakePermeability);

            #endregion

            #region Help Parameters

            var constantOne = new fsCalculatorConstant(new fsParameterIdentifier("1"))
            {
                Value = fsValue.One
            };
            var constantTwo = new fsCalculatorConstant(new fsParameterIdentifier("2"))
            {
                Value = new fsValue(2)
            };

            IEquationParameter onePlusKappa = AddVariable(new fsParameterIdentifier("1 + kappa"));
            Equations.Add(new fsSumEquation(onePlusKappa, constantOne, kappa));
            IEquationParameter oneMinusEps = AddVariable(new fsParameterIdentifier("1 - eps"));
            Equations.Add(new fsSumEquation(constantOne, oneMinusEps, eps));
            IEquationParameter oneMinusEps0 = AddVariable(new fsParameterIdentifier("1 - eps0"));
            Equations.Add(new fsSumEquation(constantOne, oneMinusEps0, eps0));
            IEquationParameter hcPlusTwoTimesHce = AddVariable(new fsParameterIdentifier("hc+ 2*hce"));
            Equations.Add(new fsSumsEquation(
                              new[] { hcPlusTwoTimesHce },
                              new[] { hc, hce, hce }));

            #endregion

            #region Equations Initialization

            AddEquation(new fsFrom0AndDpEquation(pc, pc0, Dp, nc));
            AddEquation(new fsCakeHeightFromDpTf(hc, hce, pc, kappa0, Dp, formationTime, viscosity));

            Equations.Add(new fsProductsEquation(
                              new[] { oneMinusEps0, solidsDensity, area, hc },
                              new[] { cm, suspensionMass }));

            AddEquation(new fsProductEquation(solidsMass, suspensionMass, cm));
            AddEquation(new fsSumEquation(suspensionMass, solidsMass, liquidMass));
            AddEquation(new fsMcFromHcEquation(mc, area, hc, solidsDensity, eps, rho));
            Equations.Add(new fsProductsEquation(
                              new[] { qmf, viscosity, hcPlusTwoTimesHce },
                              new[] { rho, constantTwo, pc, Dp }));
            Equations.Add(new fsProductsEquation(
                              new[] { qf, viscosity, hcPlusTwoTimesHce },
                              new[] { constantTwo, pc, Dp }));
            Equations.Add(new fsProductsEquation(
                              new[] { hc, hc },
                              new[] { constantTwo, kappa, Dp, formationTime, K }));
            Equations.Add(new fsProductsEquation(
                              new[] { K, viscosity, hcPlusTwoTimesHce },
                              new[] { hc, pc }));
            AddEquation(new fsKfromPcAndRmEquation(K, hc, pc, viscosity, Rm));

            Equations.Add(new fsProductsEquation(
                              new[] { area, hc, onePlusKappa },
                              new[] { vsus, kappa }));
            Equations.Add(new fsProductEquation(hce, pc, Rm));
            Equations.Add(new fsProductsEquation(
                              new[] { suspensionMass, kappa },
                              new[] { rhosus, area, hc, onePlusKappa }));
            Equations.Add(new fsProductsEquation(
                              new[] { Mf, kappa },
                              new[] { rho, area, hc }));
            Equations.Add(new fsProductsEquation(
                              new[] { ms },
                              new[] { area, hc, solidsDensity, oneMinusEps }));
            Equations.Add(new fsProductsEquation(
                              new[] { vf, kappa },
                              new[] { area, hc }));
            Equations.Add(new fsProductEquation(vc, area, hc));
            Equations.Add(new fsProductsEquation(
                              new[] { vs },
                              new[] { area, hc, oneMinusEps }));

            Equations.Add(new fsProductsEquation(
                              new[] { hc, qf },
                              new[] { constantTwo, Dp, K }));
            Equations.Add(new fsProductsEquation(
                              new[] { hc, qmf },
                              new[] { constantTwo, Dp, K, rho }));

            AddEquation(new fsDivisionInverseEquation(pc0, rc0));
            AddEquation(new fsAlphaPcEquation(alpha0, pc0, eps0, solidsDensity));
            AddEquation(new fsFrom0AndDpEquation(pc, pc0, Dp, nc));
            AddEquation(new fsDivisionInverseEquation(pc, rc));
            AddEquation(new fsAlphaPcEquation(alpha, pc, eps, solidsDensity));

            #endregion
        }
Esempio n. 16
0
        public fsCakeWashingCalculator()
        {
            #region Parameters Initialization

            #region Material Parameters

            IEquationParameter eta = AddVariable(fsParameterIdentifier.MotherLiquidViscosity);

            IEquationParameter rho = AddVariable(fsParameterIdentifier.MotherLiquidDensity);

            IEquationParameter rhos = AddVariable(fsParameterIdentifier.SolidsDensity);

            IEquationParameter eps0   = AddVariable(fsParameterIdentifier.CakePorosity0);
            IEquationParameter rhocd0 = AddVariable(fsParameterIdentifier.DryCakeDensity0);
            IEquationParameter Rf0    = AddVariable(fsParameterIdentifier.CakeMoistureContentRf0);
            IEquationParameter eps    = AddVariable(fsParameterIdentifier.CakePorosity);
            IEquationParameter rhocd  = AddVariable(fsParameterIdentifier.DryCakeDensity);
            IEquationParameter Rf     = AddVariable(fsParameterIdentifier.CakeMoistureContentRf);

            IEquationParameter ne = AddVariable(fsParameterIdentifier.Ne);

            IEquationParameter pc0    = AddVariable(fsParameterIdentifier.CakePermeability0);
            IEquationParameter rc0    = AddVariable(fsParameterIdentifier.CakeResistance0);
            IEquationParameter alpha0 = AddVariable(fsParameterIdentifier.CakeResistanceAlpha0);
            IEquationParameter pc     = AddVariable(fsParameterIdentifier.CakePermeability);
            IEquationParameter rc     = AddVariable(fsParameterIdentifier.CakeResistance);
            IEquationParameter alpha  = AddVariable(fsParameterIdentifier.CakeResistanceAlpha);
            IEquationParameter K      = AddVariable(fsParameterIdentifier.PracticalCakePermeability);

            IEquationParameter nc = AddVariable(fsParameterIdentifier.CakeCompressibility);

            IEquationParameter hce = AddVariable(fsParameterIdentifier.FilterMediumResistanceHce);
            IEquationParameter Rm  = AddVariable(fsParameterIdentifier.FilterMediumResistanceRm);

            IEquationParameter Sw0  = AddVariable(fsParameterIdentifier.CakeSaturationSw0);
            IEquationParameter Rfw0 = AddVariable(fsParameterIdentifier.CakeMoistureContentRfw0);

            IEquationParameter fq = AddVariable(fsParameterIdentifier.PredeliquorFlowRate);

            IEquationParameter C0p = AddVariable(fsParameterIdentifier.CakeWashOutConcentration);
            IEquationParameter X0p = AddVariable(fsParameterIdentifier.CakeWashOutContentX0p);

            IEquationParameter xr = AddVariable(fsParameterIdentifier.RemanentWashOutContent);

            IEquationParameter rhow = AddVariable(fsParameterIdentifier.WashLiquidDensity);

            IEquationParameter etaw = AddVariable(fsParameterIdentifier.WashLiquidViscosity);

            IEquationParameter cw = AddVariable(fsParameterIdentifier.LiquidWashOutConcentration);

            IEquationParameter Dn0 = AddVariable(fsParameterIdentifier.WashIndexFor0);
            IEquationParameter Dn  = AddVariable(fsParameterIdentifier.WashIndexFor);

            IEquationParameter aw1 = AddVariable(fsParameterIdentifier.AdaptationPar1);
            IEquationParameter aw2 = AddVariable(fsParameterIdentifier.AdaptationPar2);

            #endregion

            #region Machine Setting Parameters

            IEquationParameter A = AddVariable(fsParameterIdentifier.FilterArea);
            IEquationParameter b = AddVariable(fsParameterIdentifier.MachineWidth);

            IEquationParameter ns = AddVariable(fsParameterIdentifier.ns);

            IEquationParameter ls  = AddVariable(fsParameterIdentifier.ls);
            IEquationParameter lsb = AddVariable(fsParameterIdentifier.ls_over_b);
            IEquationParameter l   = AddVariable(fsParameterIdentifier.FilterLength);
            IEquationParameter lb  = AddVariable(fsParameterIdentifier.l_over_b);
            IEquationParameter As  = AddVariable(fsParameterIdentifier.As);

            IEquationParameter ttech0 = AddVariable(fsParameterIdentifier.StandardTechnicalTime);
            IEquationParameter ttech  = AddVariable(fsParameterIdentifier.TechnicalTime);

            IEquationParameter lambda = AddVariable(fsParameterIdentifier.lambda);

            IEquationParameter u  = AddVariable(fsParameterIdentifier.u);
            IEquationParameter n  = AddVariable(fsParameterIdentifier.RotationalSpeed);
            IEquationParameter tc = AddVariable(fsParameterIdentifier.CycleTime);

            IEquationParameter hc  = AddVariable(fsParameterIdentifier.CakeHeight);
            IEquationParameter Ms  = AddVariable(fsParameterIdentifier.SolidsMass);
            IEquationParameter Qms = AddVariable(fsParameterIdentifier.Qms);

            IEquationParameter Dp = AddVariable(fsParameterIdentifier.PressureDifference);

            IEquationParameter w      = AddVariable(fsParameterIdentifier.WashingRatioW);
            IEquationParameter wv     = AddVariable(fsParameterIdentifier.WashingRatioWv);
            IEquationParameter wm     = AddVariable(fsParameterIdentifier.WashingRatioWm);
            IEquationParameter Vw     = AddVariable(fsParameterIdentifier.WashLiquidVolume);
            IEquationParameter Mw     = AddVariable(fsParameterIdentifier.WashLiquidMass);
            IEquationParameter nsw    = AddVariable(fsParameterIdentifier.NumberOfWashingSegments);
            IEquationParameter sw     = AddVariable(fsParameterIdentifier.SpecificWashArea);
            IEquationParameter tw     = AddVariable(fsParameterIdentifier.WashTime);
            IEquationParameter Qw     = AddVariable(fsParameterIdentifier.WashLiquidVolFlowRate);
            IEquationParameter Qmw    = AddVariable(fsParameterIdentifier.WashLiquidMassFlowRate);
            IEquationParameter cStar  = AddVariable(fsParameterIdentifier.SpecificWashOutConcentration);
            IEquationParameter caStar = AddVariable(fsParameterIdentifier.SpecificAverageWashOut);
            IEquationParameter ccStar = AddVariable(fsParameterIdentifier.SpecificWashOutConcentrationInCake);
            IEquationParameter c      = AddVariable(fsParameterIdentifier.WashOutConcentrationInWashfiltrate);
            IEquationParameter ca     = AddVariable(fsParameterIdentifier.AverageWashOutConcentration);
            IEquationParameter cc     = AddVariable(fsParameterIdentifier.WashOutConcentrationInCake);
            IEquationParameter xStar  = AddVariable(fsParameterIdentifier.SpecificWashOutXStar);
            IEquationParameter x      = AddVariable(fsParameterIdentifier.SpecificWashOutX);
            IEquationParameter X      = AddVariable(fsParameterIdentifier.CakeWashOutContent);

            IEquationParameter wf  = AddVariable(fsParameterIdentifier.SpecificWashfiltrate);
            IEquationParameter Vwf = AddVariable(fsParameterIdentifier.VolumeOfWashfiltrate);
            IEquationParameter Mwf = AddVariable(fsParameterIdentifier.MassOfWashfiltrate);
            IEquationParameter Vc  = AddVariable(fsParameterIdentifier.CakeVolume);
            IEquationParameter Mc  = AddVariable(fsParameterIdentifier.CakeMass);
            IEquationParameter Vlc = AddVariable(fsParameterIdentifier.LiquidVolumeInCake);
            IEquationParameter Mlc = AddVariable(fsParameterIdentifier.LiquidMassInCake);
            IEquationParameter Rfw = AddVariable(fsParameterIdentifier.CakeMoistureContentRfw);
            IEquationParameter Q   = AddVariable(fsParameterIdentifier.FeedVolumeFlowRate);
            IEquationParameter Qm  = AddVariable(fsParameterIdentifier.FeedSolidsMassFlowRate);
            IEquationParameter Qa  = AddVariable(fsParameterIdentifier.AverageVolumeFlowRate);
            IEquationParameter Qma = AddVariable(fsParameterIdentifier.AverageMassFlowRate);
            IEquationParameter q   = AddVariable(fsParameterIdentifier.SpecificVolumeFlowRate);
            IEquationParameter qm  = AddVariable(fsParameterIdentifier.SpecificMassFlowRate);
            IEquationParameter qa  = AddVariable(fsParameterIdentifier.SpecificAverageVolumeFlowRate);
            IEquationParameter qma = AddVariable(fsParameterIdentifier.SpecificAverageMassFlowRate);

            #endregion

            #region Auxiliary Parameters and Constants

            var constantZero = new fsCalculatorConstant(new fsParameterIdentifier("0"))
            {
                Value = fsValue.Zero
            };
            var constantOne = new fsCalculatorConstant(new fsParameterIdentifier("1"))
            {
                Value = fsValue.One
            };

            IEquationParameter hcAddHce = AddVariable(new fsParameterIdentifier("hc + hce"));
            Equations.Add(new fsSumEquation(hcAddHce, hc, hce));

            IEquationParameter oneMinusEps0 = AddVariable(new fsParameterIdentifier("1 - eps0"));
            Equations.Add(new fsSumEquation(constantOne, eps0, oneMinusEps0));

            IEquationParameter oneMinusEps = AddVariable(new fsParameterIdentifier("1 - eps"));
            Equations.Add(new fsSumEquation(constantOne, eps, oneMinusEps));

            IEquationParameter eps0Rho = AddVariable(new fsParameterIdentifier("eps0*rho"));
            Equations.Add(new fsProductEquation(eps0Rho, eps0, rho));

            IEquationParameter epsRho = AddVariable(new fsParameterIdentifier("eps*rho"));
            Equations.Add(new fsProductEquation(epsRho, eps, rho));

            IEquationParameter rhocd0AddEps0Rho = AddVariable(new fsParameterIdentifier("rhocd0 + eps0*rho"));
            Equations.Add(new fsSumEquation(rhocd0AddEps0Rho, rhocd0, eps0Rho));

            IEquationParameter rhocdAddEpsRho = AddVariable(new fsParameterIdentifier("rhocd + eps*rho"));
            Equations.Add(new fsSumEquation(rhocdAddEpsRho, rhocd, epsRho));

            IEquationParameter oneMinusXr = AddVariable(new fsParameterIdentifier("1 - xr"));
            Equations.Add(new fsSumEquation(constantOne, xr, oneMinusXr));
            IEquationParameter oneMinusXrSw0 = AddVariable(new fsParameterIdentifier("(1 - xr)*Sw0"));
            Equations.Add(new fsProductEquation(oneMinusXrSw0, oneMinusXr, Sw0));
            IEquationParameter xrAddoneMinusXrSw0 = AddVariable(new fsParameterIdentifier("xr + (1 - xr)*Sw0"));
            Equations.Add(new fsSumEquation(xrAddoneMinusXrSw0, xr, oneMinusXrSw0));
            IEquationParameter invRfw0 = AddVariable(new fsParameterIdentifier("1/Rfw0"));
            Equations.Add(new fsDivisionInverseEquation(invRfw0, Rfw0));
            IEquationParameter fractRfw0 = AddVariable(new fsParameterIdentifier("(1 - Rfw0)/Rfw0"));
            Equations.Add(new fsSumEquation(invRfw0, fractRfw0, constantOne));

            IEquationParameter epsVc = AddVariable(new fsParameterIdentifier("eps*Vc"));
            Equations.Add(new fsProductEquation(epsVc, eps, Vc));

            IEquationParameter nsTtech = AddVariable(new fsParameterIdentifier("ns*ttech"));
            Equations.Add(new fsProductEquation(nsTtech, ns, ttech));
            IEquationParameter tcMinusNsTtech = AddVariable(new fsParameterIdentifier("tc - ns*ttech"));
            Equations.Add(new fsSumEquation(tc, nsTtech, tcMinusNsTtech));

            IEquationParameter c0 = AddVariable(new fsParameterIdentifier("c0"));
            Equations.Add(new fsProductEquation(c0, Sw0, C0p));
            IEquationParameter c0MinusCw = AddVariable(new fsParameterIdentifier("c0 - cw"));
            Equations.Add(new fsSumEquation(c0, c0MinusCw, cw));
            IEquationParameter cStarC0MinusCw = AddVariable(new fsParameterIdentifier("(c0 - cw) * c* "));
            Equations.Add(new fsProductEquation(cStarC0MinusCw, cStar, c0MinusCw));

            IEquationParameter xStarOneMinusXr = AddVariable(new fsParameterIdentifier("(1 - xr) * x* "));
            Equations.Add(new fsProductEquation(xStarOneMinusXr, xStar, oneMinusXr));

            IEquationParameter xrX0p = AddVariable(new fsParameterIdentifier("xr*X0p"));
            Equations.Add(new fsProductEquation(xrX0p, xr, X0p));
            IEquationParameter XMinusXrX0p = AddVariable(new fsParameterIdentifier("X - xr*X0p"));
            Equations.Add(new fsSumEquation(X, xrX0p, XMinusXrX0p));

            IEquationParameter ccStarC0MinusCw = AddVariable(new fsParameterIdentifier("(c0 - cw) * cc*"));
            Equations.Add(new fsProductEquation(ccStarC0MinusCw, ccStar, c0MinusCw));

            IEquationParameter caStarC0MinusCw = AddVariable(new fsParameterIdentifier("(c0 - cw) * c*"));
            Equations.Add(new fsProductEquation(caStarC0MinusCw, caStar, c0MinusCw));

            IEquationParameter rhowf = AddVariable(new fsParameterIdentifier("rhowf"));
            Equations.Add(new fsIfMoreOrLessThenOneEquation(rhowf, wf, rhow, rho, rho, constantZero, rhow));

            IEquationParameter etawf = AddVariable(new fsParameterIdentifier("etawf"));
            Equations.Add(new fsIfMoreOrLessThenOneEquation(etawf, wf, etaw, eta, eta, constantZero, etaw));

            IEquationParameter sw0PowFq = AddVariable(new fsParameterIdentifier("Sw0^fq"));
            Equations.Add(new fsTechnicalTimeFrom0Equation(sw0PowFq, constantOne, Sw0, fq)); // It's a dirty trick, of course!

            IEquationParameter c3 = AddVariable(new fsParameterIdentifier("c3"));
            Equations.Add(new fsProductsEquation(
                              new[] { c3, eps, hc, hcAddHce },
                              new[] { sw0PowFq, pc, Dp }));

            IEquationParameter rhowfEps = AddVariable(new fsParameterIdentifier("rhowf*eps"));
            Equations.Add(new fsProductEquation(rhowfEps, rhowf, eps));
            IEquationParameter rhocdAddRhowfEps = AddVariable(new fsParameterIdentifier("rhocd + rhowf*eps"));
            Equations.Add(new fsSumEquation(rhocdAddRhowfEps, rhocd, rhowfEps));

            #endregion

            #endregion

            #region Equations Initialization

            #region Material Parameters Equations

            Equations.Add(new fsProductsEquation(
                              new[] { rhocd0 },
                              new[] { oneMinusEps0, rhos }));
            Equations.Add(new fsProductsEquation(
                              new[] { rhocd },
                              new[] { oneMinusEps, rhos }));
            Equations.Add(new fsProductEquation(eps0Rho, Rf0, rhocd0AddEps0Rho));
            Equations.Add(new fsProductEquation(epsRho, Rf, rhocdAddEpsRho));
            Equations.Add(new fsFrom0AndDpEquation(eps, eps0, Dp, ne));

            Equations.Add(new fsDivisionInverseEquation(rc0, pc0));
            Equations.Add(new fsDivisionInverseEquation(rc, pc));
            Equations.Add(new fsFrom0AndDpEquation(pc, pc0, Dp, nc));
            Equations.Add(new fsProductsEquation(
                              new[] { alpha0, rhos, oneMinusEps0, pc0 },
                              new[] { constantOne }));
            Equations.Add(new fsProductsEquation(
                              new[] { alpha, rhos, oneMinusEps, pc },
                              new[] { constantOne }));
            Equations.Add(new fsProductsEquation(
                              new[] { K, eta, hcAddHce },
                              new[] { hc, pc }));

            Equations.Add(new fsProductEquation(hce, Rm, pc));

            Equations.Add(new fsProductsEquation(
                              new[] { oneMinusEps, rhos },
                              new[] { Sw0, eps, rho, fractRfw0 }));

            Equations.Add(new fsProductsEquation(
                              new[] { X0p, rhocd, oneMinusXr },
                              new[] { eps, xrAddoneMinusXrSw0, C0p }));

            /**
             * Modelling of the equation Dn = Dn0 * (u/u0)^(-aw1) * (hc/hc0)^aw2,
             * where u0 = 0.0001 m/s and hc0 = 0.01 m/s,
             * by means of the equation x = x0 * (p/10^5)^(-degree) settled in the class fsFrom0AndDpEquation
             **/
            var const1e7 = new fsCalculatorConstant(new fsParameterIdentifier("1e7"))
            {
                Value = new fsValue(1e7)
            };
            var const1e9 = new fsCalculatorConstant(new fsParameterIdentifier("1e9"))
            {
                Value = new fsValue(1e9)
            };
            IEquationParameter v1 = AddVariable(new fsParameterIdentifier("u*10^9"));
            Equations.Add(new fsProductEquation(v1, u, const1e9));
            IEquationParameter v2 = AddVariable(new fsParameterIdentifier("Dn0*(u/u0)^(-aw1)"));
            Equations.Add(new fsFrom0AndDpEquation(v2, Dn0, v1, aw1));
            IEquationParameter v3 = AddVariable(new fsParameterIdentifier("hc*10^7"));
            Equations.Add(new fsProductEquation(v3, hc, const1e7));
            IEquationParameter v4 = AddVariable(new fsParameterIdentifier("-aw2"));
            Equations.Add(new fsSumEquation(constantZero, v4, aw2));
            Equations.Add(new fsFrom0AndDpEquation(Dn, v2, v3, v4));

            Equations.Add(new fsProductsEquation( // This equation needs to be discussed as to the possible status "calculated" for u and Dp (only input parameter!)
                              new[] { u, eps, etaw, hcAddHce },
                              new[] { pc, Dp }));

            #endregion

            #region Machine Setting Parameters Equations

            Equations.Add(new fsProductsEquation(
                              new[] { b, ns, ls },
                              new[] { A }));
            Equations.Add(new fsProductEquation(ls, lsb, b));
            Equations.Add(new fsProductEquation(l, lb, b));
            Equations.Add(new fsProductEquation(l, ns, ls));
            Equations.Add(new fsProductEquation(As, ls, b));

            Equations.Add(new fsTechnicalTimeFrom0Equation(ttech, ttech0, As, lambda));

            Equations.Add(new fsProductEquation(u, l, n));
            Equations.Add(new fsDivisionInverseEquation(tc, n));

            Equations.Add(new fsProductsEquation(
                              new[] { A, rhos, oneMinusEps, hc },
                              new[] { Ms }));
            Equations.Add(new fsProductEquation(Ms, Qms, tc));

            Equations.Add(new fsProductsEquation(
                              new[] { w, eps },
                              new[] { oneMinusEps, rhos, wv }));
            Equations.Add(new fsProductsEquation(
                              new[] { w, rhow, eps },
                              new[] { rhos, oneMinusEps, wm }));
            Equations.Add(new fsProductsEquation(
                              new[] { eps, A, hc, w },
                              new[] { Vw }));
            Equations.Add(new fsProductEquation(Mw, rhow, Vw));
            Equations.Add(new fsProductEquation(nsw, ns, sw));
            Equations.Add(new fsProductEquation(tw, sw, tcMinusNsTtech));
            Equations.Add(new fsSumsEquation(
                              new[] { wf, constantOne },
                              new[] { w, Sw0 }));
            Equations.Add(new fsProductEquation(Vw, Qw, tc));
            Equations.Add(new fsProductEquation(Qmw, rhow, Qw));
            Equations.Add(new fsSumEquation(c, cStarC0MinusCw, cw));
            Equations.Add(new fsSumEquation(x, xr, xStarOneMinusXr));
            Equations.Add(new fsProductEquation(X, X0p, x));
            Equations.Add(new fsProductsEquation(
                              new[] { eps, cc },
                              new[] { rhocd, XMinusXrX0p }));
            Equations.Add(new fsSumEquation(cc, ccStarC0MinusCw, cw));
            Equations.Add(new fsSumEquation(ca, caStarC0MinusCw, cw));
            Equations.Add(new fsCstarDnWfEquation(cStar, Dn, wf));
            Equations.Add(new fsXstarDnWfEquation(xStar, Dn, wf));
            Equations.Add(new fsCaDnCwWfEquation(ca, cw, c0, Dn, wf));

            Equations.Add(new fsWfTwEquation(wf, tw, c3, etaw, eta));
            Equations.Add(new fsCaWfXstarEquation(ca, xStar, cw, c0, wf));
            Equations.Add(new fsIfMoreOrLessThenOneEquation(Vwf, wf, epsVc, constantZero, constantZero, epsVc, constantZero));
            Equations.Add(new fsProductsEquation(
                              new[] { eps, c3, Vc },
                              new[] { Q, etawf }));
            Equations.Add(new fsProductsEquation(
                              new[] { rhowf, eps, Vc },
                              new[] { Mlc }));
            Equations.Add(new fsMwfVcWfEquation(Mwf, eps, Vc, rhow, rho, wf));
            Equations.Add(new fsProductEquation(Qm, rhowf, Q));
            Equations.Add(new fsProductEquation(Mc, rhocdAddRhowfEps, Vc));
            Equations.Add(new fsProductEquation(Vc, A, hc));
            Equations.Add(new fsProductEquation(Vlc, eps, Vc));
            Equations.Add(new fsProductEquation(Mlc, Rfw, Mc));
            Equations.Add(new fsProductEquation(Vwf, Qa, tc));
            Equations.Add(new fsProductEquation(Mwf, Qma, tc));
            Equations.Add(new fsProductEquation(Q, q, A));
            Equations.Add(new fsProductEquation(Qm, qm, A));
            Equations.Add(new fsProductEquation(Qa, qa, A));
            Equations.Add(new fsProductEquation(Qma, qma, A));

            #endregion

            #endregion
        }
Esempio n. 17
0
        public fsHydrocycloneCalculator()
        {
            #region Parameters Initialization

            IEquationParameter etaf   = AddConstant(fsParameterIdentifier.MotherLiquidViscosity);
            IEquationParameter rhoS   = AddConstant(fsParameterIdentifier.SolidsDensity);
            IEquationParameter rhoF   = AddConstant(fsParameterIdentifier.MotherLiquidDensity);
            IEquationParameter rhoSus = AddConstant(fsParameterIdentifier.SuspensionDensity);
            IEquationParameter cv     = AddConstant(fsParameterIdentifier.SuspensionSolidsVolumeFraction);
            IEquationParameter cm     = AddConstant(fsParameterIdentifier.SuspensionSolidsMassFraction);

            IEquationParameter xG     = AddVariable(fsParameterIdentifier.xg);
            IEquationParameter sigmaG = AddVariable(fsParameterIdentifier.sigma_g);
            IEquationParameter sigmaS = AddVariable(fsParameterIdentifier.sigma_s);

            IEquationParameter rf      = AddVariable(fsParameterIdentifier.rf);
            IEquationParameter DuOverD = AddVariable(fsParameterIdentifier.DuOverD);
            IEquationParameter xRed50  = AddVariable(fsParameterIdentifier.ReducedCutSize);
            IEquationParameter D       = AddVariable(fsParameterIdentifier.MachineDiameter);

            IEquationParameter numberOfCyclones = AddVariable(fsParameterIdentifier.NumberOfCyclones);
            IEquationParameter Dp = AddVariable(fsParameterIdentifier.PressureDifference);

            IEquationParameter Q   = AddVariable(fsParameterIdentifier.FeedVolumeFlowRate);
            IEquationParameter Qm  = AddVariable(fsParameterIdentifier.FeedSolidsMassFlowRate);
            IEquationParameter Qms = AddVariable(fsParameterIdentifier.Qms);

            IEquationParameter Cu = AddVariable(fsParameterIdentifier.UnderflowSolidsConcentration);
            IEquationParameter Co = AddVariable(fsParameterIdentifier.OverflowSolidsConcentration);
            IEquationParameter C  = AddConstant(fsParameterIdentifier.SuspensionSolidsConcentration);

            IEquationParameter ReducedTotalEfficiency = AddVariable(fsParameterIdentifier.ReducedTotalEfficiency);
            IEquationParameter TotalEfficiency        = AddVariable(fsParameterIdentifier.TotalEfficiency);

            IEquationParameter StokesNumber   = AddVariable(fsParameterIdentifier.StokesNumber);
            IEquationParameter EulerNumber    = AddVariable(fsParameterIdentifier.EulerNumber);
            IEquationParameter ReynoldsNumber = AddVariable(fsParameterIdentifier.ReynoldsNumber);
            IEquationParameter v = AddVariable(fsParameterIdentifier.AverageVelocity);


            IEquationParameter alpha1 = AddVariable(fsParameterIdentifier.Alpha1);
            IEquationParameter alpha2 = AddVariable(fsParameterIdentifier.Alpha2);
            IEquationParameter alpha3 = AddVariable(fsParameterIdentifier.Alpha3);
            IEquationParameter beta1  = AddVariable(fsParameterIdentifier.Beta1);
            IEquationParameter beta2  = AddVariable(fsParameterIdentifier.Beta2);
            IEquationParameter beta3  = AddVariable(fsParameterIdentifier.Beta3);
            IEquationParameter gamma1 = AddVariable(fsParameterIdentifier.Gamma1);
            IEquationParameter gamma2 = AddVariable(fsParameterIdentifier.Gamma2);
            IEquationParameter gamma3 = AddVariable(fsParameterIdentifier.Gamma3);

            IEquationParameter LOverD  = AddVariable(fsParameterIdentifier.bigLOverD);
            IEquationParameter lOverD  = AddVariable(fsParameterIdentifier.smallLOverD);
            IEquationParameter DiOverD = AddVariable(fsParameterIdentifier.DiOverD);
            IEquationParameter DoOverD = AddVariable(fsParameterIdentifier.DoOverD);

            IEquationParameter L   = AddVariable(fsParameterIdentifier.CycloneLength);
            IEquationParameter l   = AddVariable(fsParameterIdentifier.LengthOfCylindricalPart);
            IEquationParameter Di  = AddVariable(fsParameterIdentifier.InletDiameter);
            IEquationParameter Do  = AddVariable(fsParameterIdentifier.OutletDiameter);
            IEquationParameter Du  = AddVariable(fsParameterIdentifier.UnderflowDiameter);
            IEquationParameter Qo  = AddVariable(fsParameterIdentifier.OverflowVolumeFlowRate);
            IEquationParameter Qu  = AddVariable(fsParameterIdentifier.UnderflowVolumeFlowRate);
            IEquationParameter Qmo = AddVariable(fsParameterIdentifier.OverflowMassFlowRate);
            IEquationParameter Qmu = AddVariable(fsParameterIdentifier.UnderflowMassFlowRate);
            IEquationParameter Qso = AddVariable(fsParameterIdentifier.OverflowSolidsMassFlowRate);
            IEquationParameter Qsu = AddVariable(fsParameterIdentifier.UnderflowSolidsMassFlowRate);
            IEquationParameter cmo = AddVariable(fsParameterIdentifier.OverflowSolidsMassFraction);
            IEquationParameter cmu = AddVariable(fsParameterIdentifier.UnderflowSolidsMassFraction);
            IEquationParameter cvo = AddVariable(fsParameterIdentifier.OverflowSolidsVolumeFraction);
            IEquationParameter cvu = AddVariable(fsParameterIdentifier.UnderflowSolidsVolumeFraction);

            #region Help Parameters and Constants

            var constantOne = new fsCalculatorConstant(new fsParameterIdentifier("1"))
            {
                Value = fsValue.One
            };
            var constantTwo = new fsCalculatorConstant(new fsParameterIdentifier("2"))
            {
                Value = new fsValue(2)
            };
            var constantFour = new fsCalculatorConstant(new fsParameterIdentifier("4"))
            {
                Value = new fsValue(4)
            };
            var constantEighteen = new fsCalculatorConstant(new fsParameterIdentifier("18"))
            {
                Value = new fsValue(18)
            };
            var constantPi = new fsCalculatorConstant(new fsParameterIdentifier("Pi"))
            {
                Value = new fsValue(Math.PI)
            };

            IEquationParameter rhoSMinusRhoF = AddVariable(new fsParameterIdentifier("rho_s - rho_f"));
            Equations.Add(new fsSumEquation(rhoS, rhoF, rhoSMinusRhoF));

            IEquationParameter rhoSusOverflow  = AddVariable(new fsParameterIdentifier("rho_sus_overflow"));
            IEquationParameter rhoSusUnderflow = AddVariable(new fsParameterIdentifier("rho_sus_underflow"));

            #endregion

            #endregion

            #region Equations Initialization

            Equations.Add(new fsProductEquation(Qm, Q, rhoSus));
            Equations.Add(new fsProductEquation(Qms, Qm, cm));

            Equations.Add(new fsReducedTotalEfficiencyEquation(ReducedTotalEfficiency, xG, xRed50, sigmaG, sigmaS));
            Equations.Add(new fsTotalEfficiencyEquation(TotalEfficiency, rf, ReducedTotalEfficiency));

            Equations.Add(new fsProductEquation(Qu, rf, Q));
            Equations.Add(new fsCUnderflowEquation(Cu, C, rf, ReducedTotalEfficiency));
            Equations.Add(new fsCOverflowEquation(Co, C, ReducedTotalEfficiency));

            Equations.Add(new fsDFromxRed50QnDuOverDEquation(D, xRed50, Q, numberOfCyclones, DuOverD, rhoS, rhoF, etaf, cv, alpha1, alpha2, alpha3, beta1, beta2, beta3, gamma1, gamma2, gamma3));
            Equations.Add(new fsProductsEquation(
                              new[] { v, constantPi, D, D, numberOfCyclones },
                              new[] { constantFour, Q }));
            Equations.Add(new fsProductsEquation(
                              new[] { StokesNumber, constantEighteen, etaf, D },
                              new[] { xRed50, xRed50, rhoSMinusRhoF, v }));
            Equations.Add(new fsProductsEquation(
                              new[] { EulerNumber, rhoF, v, v },
                              new[] { constantTwo, Dp }));
            Equations.Add(new fsProductsEquation(
                              new[] { ReynoldsNumber, etaf },
                              new[] { rhoF, D, v }));
            Equations.Add(new fsDFromxRed50QnRfEquation(D, xRed50, rhoS, rhoF, Q, etaf, numberOfCyclones, cv, rf, alpha1, alpha2, alpha3, beta1, beta2, beta3));
            Equations.Add(new fsDuOverDrfEuEquation(DuOverD, rf, EulerNumber, gamma1, gamma2, gamma3));
            Equations.Add(new fsEulerReynoldsConnectionEquation(EulerNumber, ReynoldsNumber, cv, beta1, beta2, beta3));
            Equations.Add(new fsReynoldsFromXRed50Equation(ReynoldsNumber, xRed50, rhoS, rhoF, etaf, Dp, rf, cv, alpha1, alpha2, alpha3));
            Equations.Add(new fsvDuOverDxRed50Equation(v, DuOverD, xRed50, rhoS, rhoF, etaf, Dp, cv, alpha1, alpha2, alpha3, beta1, beta2, beta3, gamma1, gamma2, gamma3));
            Equations.Add(new fsQnDpDEquation(Q, Dp, numberOfCyclones, D, rhoF, etaf, cv, beta1, beta2, beta3));

            Equations.Add(new fsProductEquation(L, LOverD, D));
            Equations.Add(new fsProductEquation(l, lOverD, D));
            Equations.Add(new fsProductEquation(Di, DiOverD, D));
            Equations.Add(new fsProductEquation(Do, DoOverD, D));
            Equations.Add(new fsProductEquation(Du, DuOverD, D));
            Equations.Add(new fsProductEquation(Qu, rf, Q));
            Equations.Add(new fsSumEquation(Q, Qo, Qu));
            Equations.Add(new fsQmFromQCEquation(Qmo, Qo, Co, rhoF, rhoS));
            Equations.Add(new fsQmFromQCEquation(Qmu, Qu, Cu, rhoF, rhoS));
            Equations.Add(new fsProductEquation(Qsu, Qu, Cu));
            Equations.Add(new fsProductEquation(Qso, Qo, Co));
            Equations.Add(new fsConcentrationEquation(Co, rhoF, rhoS, rhoSusOverflow));
            Equations.Add(new fsConcentrationEquation(Cu, rhoF, rhoS, rhoSusUnderflow));
            Equations.Add(new fsMassConcentrationEquation(cmu, rhoF, rhoS, rhoSusUnderflow));
            Equations.Add(new fsMassConcentrationEquation(cmo, rhoF, rhoS, rhoSusOverflow));
            Equations.Add(new fsVolumeConcentrationEquation(cvu, rhoF, rhoS, rhoSusUnderflow));
            Equations.Add(new fsVolumeConcentrationEquation(cvo, rhoF, rhoS, rhoSusOverflow));

            #endregion
        }