Exemplo n.º 1
0
        bool IFunction.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            var Name1 = coolpropPlugin.GetStringParam(args[0], ref context);
            var Prop1 = coolpropPlugin.GetNumberParam(args[1], ref context);

            Unit.match(Name1, Prop1, context);
            var Name2 = coolpropPlugin.GetStringParam(args[2], ref context);
            var Prop2 = coolpropPlugin.GetNumberParam(args[3], ref context);

            Unit.match(Name2, Prop2, context);
            var FluidName = coolpropPlugin.GetStringParam(args[4], ref context);
            var phase     = new System.Text.StringBuilder(10000);
            var Result    = CoolPropDLLfunc(Name1, Prop1.obj.ToDouble(), Name2, Prop2.obj.ToDouble(), FluidName, phase, phase.Capacity);

            coolpropPlugin.LogInfo("[INFO ]",
                                   "Name1 = {0}, Prop1 = {1}, Name2 = {2}, Prop2 = {3}, FluidName = {4}, phase = {5}, Result = {6}",
                                   Name1, Prop1.obj.ToDouble(), Name2, Prop2.obj.ToDouble(), FluidName, phase.ToString(), Result);
            if (Result != 1)
            {
                coolpropPlugin.CoolPropError();
            }
            result = coolpropPlugin.MakeStringResult(phase.ToString());

            return(true);
        }
Exemplo n.º 2
0
        public bool TryEvaluateExpression(Entry value, SMath.Math.Store context, out Entry result)
        {
            var Name1 = coolpropPlugin.GetStringParam(value.Items[0], context);
            var Prop1 = coolpropPlugin.GetNumberParam(value.Items[1], context);

            Unit.match(Name1, Prop1, context);
            var Name2 = coolpropPlugin.GetStringParam(value.Items[2], context);
            var Prop2 = coolpropPlugin.GetNumberParam(value.Items[3], context);

            Unit.match(Name2, Prop2, context);
            var FluidName = coolpropPlugin.GetStringParam(value.Items[4], context);
            var phase     = new System.Text.StringBuilder(10000);
            var Result    = CoolPropDLLfunc(Name1, Prop1.obj.ToDouble(), Name2, Prop2.obj.ToDouble(), FluidName, phase, phase.Capacity);

            coolpropPlugin.LogInfo("[INFO]",
                                   "Name1 = {0}, Prop1 = {1}, Name2 = {2}, Prop2 = {3}, FluidName = {4}, phase = {5}, Result = {6}",
                                   Name1, Prop1.obj.ToDouble(), Name2, Prop2.obj.ToDouble(), FluidName, phase.ToString(), Result);
            if (Result != 1)
            {
                coolpropPlugin.CoolPropError();
            }
            result = coolpropPlugin.MakeStringResult(phase.ToString());

            return(true);
        }
Exemplo n.º 3
0
        public bool TryEvaluateExpression(Entry value, SMath.Math.Store context, out Entry result)
        {
            result = null;

            if (value.Type != TermType.Function)
            {
                return(false);
            }

            foreach (var func in functions)
            {
                if (!func.Info.Equals(value.ToTerm()))
                {
                    continue;
                }

                try
                {
                    return(func.TryEvaluateExpression(value, context, out result));
                }
                catch (System.Exception ex)
                {
                    LogInfo("[ERROR]", "{0}({1}) {2}", value.Text, value.ArgsCount, ex.Message);
                    throw;
                }
            }

            return(false);
        }
Exemplo n.º 4
0
        bool IFunction.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            var param  = coolpropPlugin.GetStringParam(args[0], ref context);
            var Result = CoolPropDLLfunc(param);

            coolpropPlugin.LogInfo("[INFO ]", "param = {0}, Result = {1}", param, Result);
            result = coolpropPlugin.MakeDoubleResult(Result, Unit.unitless);

            return(true);
        }
Exemplo n.º 5
0
        public bool TryEvaluateExpression(Entry value, SMath.Math.Store context, out Entry result)
        {
            var param  = coolpropPlugin.GetStringParam(value.Items[0], context);
            var Result = CoolPropDLLfunc(param);

            coolpropPlugin.LogInfo("[INFO]", "param = {0}, Result = {1}", param, Result);
            result = coolpropPlugin.MakeDoubleResult(Result, Unit.unitless);

            return(true);
        }
Exemplo n.º 6
0
        public static string GetStringParam(Term[] arg, ref SMath.Math.Store context)
        {
            var dbl = GetNumberParam(arg, ref context).obj as SMath.Math.Numeric.TDouble;

            if (!dbl.isText)
            {
                throw new SMath.Manager.EvaluationException(Errors.ArgumentMustBeString);
            }
            return(dbl.ToString().Trim('"'));
        }
Exemplo n.º 7
0
        public static string GetStringParam(Entry arg, SMath.Math.Store context)
        {
            var dbl = GetNumberParam(arg, context).obj as SMath.Math.Numeric.TDouble;

            if (!dbl.isText)
            {
                throw new SMath.Manager.MathException(Errors.ArgumentMustBeString);
            }
            return(dbl.ToString().Trim(Symbols.StringChar[0]));
        }
Exemplo n.º 8
0
        bool IFunction.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            string FluidName = coolpropPlugin.GetStringParam(args[0], ref context),
                   Output    = coolpropPlugin.GetStringParam(args[1], ref context);
            var Result       = CoolPropDLLfunc(FluidName, Output);

            coolpropPlugin.LogInfo("[INFO ]", "FluidName = {0}, Output = {1}, Result = {2}", FluidName, Output, Result);
            result = coolpropPlugin.MakeDoubleResult(Result, Unit.Find(Output));

            return(true);
        }
        bool IFunction.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            var Ref             = coolpropPlugin.GetStringParam(args[0], ref context);
            var reference_state = coolpropPlugin.GetStringParam(args[1], ref context);
            var Result          = CoolPropDLLfunc(Ref, reference_state);

            coolpropPlugin.LogInfo("[INFO ]", "Ref = {0}, reference_state = {1} Result = {2}", Ref, reference_state, Result);
            result = coolpropPlugin.MakeDoubleResult(Result, Unit.unitless);

            return(true);
        }
Exemplo n.º 10
0
        static void matchInternal(MItem unit, SMath.Math.Numeric.TNumber val, ref SMath.Math.Store context)
        {
            // First, reduce our units to basic representation to allow MathEqual()
            var t = SMath.Math.Decision.Preprocessing(unit.ToEntry(), context);
            var u = Expression.SimplifyEx(Converter.ToMItem(t), context);

            if (!val.obj.Units.MathEqual(u) && !val.obj.Units.MathEqual(unitless))
            {
                throw new SMath.Manager.MathException(SMath.Manager.Errors.UnitsDontMatch);
            }
        }
        public bool TryEvaluateExpression(Entry value, SMath.Math.Store context, out Entry result)
        {
            var Ref             = coolpropPlugin.GetStringParam(value.Items[0], context);
            var reference_state = coolpropPlugin.GetStringParam(value.Items[1], context);
            var Result          = CoolPropDLLfunc(Ref, reference_state);

            coolpropPlugin.LogInfo("[INFO]", "Ref = {0}, reference_state = {1} Result = {2}", Ref, reference_state, Result);
            result = coolpropPlugin.MakeDoubleResult(Result, Unit.unitless);

            return(true);
        }
Exemplo n.º 12
0
        bool IFunction.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            // Possible inputs:
            // "Omega"="HumRat"="W"        = Humidity ratio
            // "Tdp"="T_dp"="DewPoint"="D" = Dewpoint temperature
            // "Twb"="T_wb"="WetBulb"="B"  = Wet bulb temperature
            // "Enthalpy"="H"              = Enthalpy
            // "Entropy"="S"               = Entropy
            // "RH"="RelHum"="R"           = Relative humidity
            // "Tdb"="T_db"="T"            = Dry-bulb temperature
            // "P"                         = Pressure
            // "V"="Vda"                   = Volume of dry air
            // "mu"="Visc"="M"             = Viscosity
            // "k"="Conductivity"="K"      = Conductivity

            // Output:
            // "Vda"="V"[m^3/kg_da]
            // "Vha"[m^3/kg_ha]
            // "Y"[mol_w/mol]
            // "Hda"="H"
            // "Hha"[kJ/kg_ha]
            // "S"="Entropy"[kJ/kg_da]
            // "C"="cp"[kJ/kg_da]
            // "Cha"="cp_ha"[kJ/kg_da]
            // "Tdp"="D"[K]
            // "Twb"="T_wb"="WetBulb"="B"[K]
            // "Omega"="HumRat"="W"
            // "RH"="RelHum"="R"
            // "mu"="Visc"="M"
            // "k"="Conductivity"="K"

            var Output = coolpropPlugin.GetStringParam(args[0], ref context);
            var Name1  = coolpropPlugin.GetStringParam(args[1], ref context);
            var Prop1  = coolpropPlugin.GetNumberParam(args[2], ref context);

            Unit.matchHA(Name1, Prop1, context);
            var Name2 = coolpropPlugin.GetStringParam(args[3], ref context);
            var Prop2 = coolpropPlugin.GetNumberParam(args[4], ref context);

            Unit.matchHA(Name2, Prop2, context);
            var Name3 = coolpropPlugin.GetStringParam(args[5], ref context);
            var Prop3 = coolpropPlugin.GetNumberParam(args[6], ref context);

            Unit.matchHA(Name3, Prop3, context);
            var Result = CoolPropDLLfunc(Output, Name1, Prop1.obj.ToDouble(), Name2, Prop2.obj.ToDouble(), Name3, Prop3.obj.ToDouble());

            coolpropPlugin.LogInfo("[INFO ]",
                                   "Output = {0}, Name1 = {1}, Prop1 = {2}, Name2 = {3}, Prop2 = {4}, Name3 = {5}, Prop3 = {6}, Result = {7}",
                                   Output, Name1, Prop1.obj.ToDouble(), Name2, Prop2.obj.ToDouble(), Name3, Prop3.obj.ToDouble(), Result);
            result = coolpropPlugin.MakeDoubleResult(Result, Unit.FindHA(Output));

            return(true);
        }
        bool IFunction.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            var    param = coolpropPlugin.GetStringParam(args[0], ref context);
            string resultStr;

            if (!CoolPropDLLfunc(param, out resultStr))
            {
                coolpropPlugin.CoolPropError();
            }
            result = coolpropPlugin.MakeStringResult(resultStr);
            return(true);
        }
Exemplo n.º 14
0
        public bool TryEvaluateExpression(Entry value, SMath.Math.Store context, out Entry result)
        {
            var    param = coolpropPlugin.GetStringParam(value.Items[0], context);
            string resultStr;

            if (!CoolPropDLLfunc(param, out resultStr))
            {
                coolpropPlugin.CoolPropError();
            }
            result = coolpropPlugin.MakeStringResult(resultStr);
            return(true);
        }
Exemplo n.º 15
0
        bool IFunction.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            var param  = coolpropPlugin.GetStringParam(args[0], ref context);
            var output = new System.Text.StringBuilder(10000);
            var Result = CoolPropDLLfunc(param, output, output.Capacity);

            coolpropPlugin.LogInfo("[INFO ]", "param = {0} output = {1} Result = {2}", param, output.ToString(), Result);
            if (Result != 1)
            {
                throw new EvaluationException(Errors.ArgumentDoesNotMatchToExpectedKind);
            }
            result = coolpropPlugin.MakeStringResult(output.ToString());

            return(true);
        }
Exemplo n.º 16
0
        public bool TryEvaluateExpression(Entry value, SMath.Math.Store context, out Entry result)
        {
            var Ref    = coolpropPlugin.GetStringParam(value.Items[0], context);
            var T      = coolpropPlugin.GetNumberParam(value.Items[1], context);
            var rho    = coolpropPlugin.GetNumberParam(value.Items[2], context);
            var h0     = coolpropPlugin.GetNumberParam(value.Items[3], context);
            var s0     = coolpropPlugin.GetNumberParam(value.Items[4], context);
            var Result = CoolPropDLLfunc(Ref, T.obj.ToDouble(), rho.obj.ToDouble(), h0.obj.ToDouble(), s0.obj.ToDouble());

            coolpropPlugin.LogInfo("[INFO]",
                                   "Ref = {0} T = {1} rho = {2} h0 = {3} s0 = {4} Result = {5}",
                                   Ref, T.obj.ToDouble(), rho.obj.ToDouble(), h0.obj.ToDouble(), s0.obj.ToDouble(), Result);
            result = coolpropPlugin.MakeDoubleResult(Result, Unit.unitless);

            return(true);
        }
        bool IFunction.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            var Ref    = coolpropPlugin.GetStringParam(args[0], ref context);
            var T      = coolpropPlugin.GetNumberParam(args[1], ref context);
            var rho    = coolpropPlugin.GetNumberParam(args[2], ref context);
            var h0     = coolpropPlugin.GetNumberParam(args[3], ref context);
            var s0     = coolpropPlugin.GetNumberParam(args[4], ref context);
            var Result = CoolPropDLLfunc(Ref, T.obj.ToDouble(), rho.obj.ToDouble(), h0.obj.ToDouble(), s0.obj.ToDouble());

            coolpropPlugin.LogInfo("[INFO ]",
                                   "Ref = {0} T = {1} rho = {2} h0 = {3} s0 = {4} Result = {5}",
                                   Ref, T.obj.ToDouble(), rho.obj.ToDouble(), h0.obj.ToDouble(), s0.obj.ToDouble(), Result);
            result = coolpropPlugin.MakeDoubleResult(Result, Unit.unitless);

            return(true);
        }
        bool IFunction.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            var fluid  = coolpropPlugin.GetStringParam(args[0], ref context);
            var param  = coolpropPlugin.GetStringParam(args[1], ref context);
            var output = new System.Text.StringBuilder(10000);
            var Result = CoolPropDLLfunc(fluid, param, output, output.Capacity);

            coolpropPlugin.LogInfo("[INFO ]", "fluid = {0} param = {1} output = {2} Result = {3}", fluid, param, output.ToString(), Result);
            if (Result != 1)
            {
                coolpropPlugin.CoolPropError();
            }
            result = coolpropPlugin.MakeStringResult(output.ToString());

            return(true);
        }
Exemplo n.º 19
0
        public bool TryEvaluateExpression(Entry value, SMath.Math.Store context, out Entry result)
        {
            var fluid  = coolpropPlugin.GetStringParam(value.Items[0], context);
            var param  = coolpropPlugin.GetStringParam(value.Items[1], context);
            var output = new System.Text.StringBuilder(10000);
            var Result = CoolPropDLLfunc(fluid, param, output, output.Capacity);

            coolpropPlugin.LogInfo("[INFO]", "fluid = {0} param = {1} output = {2} Result = {3}", fluid, param, output.ToString(), Result);
            if (Result != 1)
            {
                coolpropPlugin.CoolPropError();
            }
            result = coolpropPlugin.MakeStringResult(output.ToString());

            return(true);
        }
Exemplo n.º 20
0
        public bool TryEvaluateExpression(Entry value, SMath.Math.Store context, out Entry result)
        {
            string FluidName = coolpropPlugin.GetStringParam(value.Items[0], context),
                   Output    = coolpropPlugin.GetStringParam(value.Items[1], context);
            var Result       = CoolPropDLLfunc(FluidName, Output);

            coolpropPlugin.LogInfo("[INFO]", "FluidName = {0}, Output = {1}, Result = {2}", FluidName, Output, Result);
            var ResUnit = Unit.Find(Output);

            // Props1SI may take parameters in either order; so, Output may actually be in FluidName
            if (ResUnit == Unit.unitless)
            {
                ResUnit = Unit.Find(FluidName);
            }
            result = coolpropPlugin.MakeDoubleResult(Result, ResUnit);

            return(true);
        }
Exemplo n.º 21
0
        bool IFunction.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            string FluidName = coolpropPlugin.GetStringParam(args[0], ref context),
                   Output    = coolpropPlugin.GetStringParam(args[1], ref context);
            var Result       = CoolPropDLLfunc(FluidName, Output);

            coolpropPlugin.LogInfo("[INFO ]", "FluidName = {0}, Output = {1}, Result = {2}", FluidName, Output, Result);
            var ResUnit = Unit.Find(Output);

            // Props1SI may take parameters in either order; so, Output may actually be in FluidName
            if (ResUnit == Unit.unitless)
            {
                ResUnit = Unit.Find(FluidName);
            }
            result = coolpropPlugin.MakeDoubleResult(Result, ResUnit);

            return(true);
        }
Exemplo n.º 22
0
        bool IFunction.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            var fluid_name = coolpropPlugin.GetStringParam(args[0], ref context);
            var output     = coolpropPlugin.GetStringParam(args[1], ref context);
            var Q          = (int)coolpropPlugin.GetNumberParam(args[2], ref context).obj.ToDouble();
            var input      = coolpropPlugin.GetStringParam(args[3], ref context);
            var value      = coolpropPlugin.GetNumberParam(args[4], ref context);

            Unit.match(input, value, context);
            var Result = CoolPropDLLfunc(fluid_name, output, Q, input, value.obj.ToDouble());

            coolpropPlugin.LogInfo("[INFO ]",
                                   "fluid_name = {0}, output = {1}, Q = {2}, input = {3}, value = {4}, Result = {5}",
                                   fluid_name, output, Q, input, value.obj.ToDouble(), Result);
            result = coolpropPlugin.MakeDoubleResult(Result, Unit.Find(output));

            return(true);
        }
        public bool TryEvaluateExpression(Entry value, SMath.Math.Store context, out Entry result)
        {
            var fluid_name = coolpropPlugin.GetStringParam(value.Items[0], context);
            var output     = coolpropPlugin.GetStringParam(value.Items[1], context);
            var Q          = (int)coolpropPlugin.GetNumberParam(value.Items[2], context).obj.ToDouble();
            var inputVar   = coolpropPlugin.GetStringParam(value.Items[3], context);
            var inputVal   = coolpropPlugin.GetNumberParam(value.Items[4], context);

            Unit.match(inputVar, inputVal, context);
            var Result = CoolPropDLLfunc(fluid_name, output, Q, inputVar, inputVal.obj.ToDouble());

            coolpropPlugin.LogInfo("[INFO]",
                                   "fluid_name = {0}, output = {1}, Q = {2}, input = {3}, value = {4}, Result = {5}",
                                   fluid_name, output, Q, inputVar, inputVal.obj.ToDouble(), Result);
            result = coolpropPlugin.MakeDoubleResult(Result, Unit.Find(output));

            return(true);
        }
Exemplo n.º 24
0
        bool IFunction.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            var Output = coolpropPlugin.GetStringParam(args[0], ref context);
            var Name1  = coolpropPlugin.GetStringParam(args[1], ref context);
            var Prop1  = coolpropPlugin.GetNumberParam(args[2], ref context);

            Unit.match(Name1, Prop1, context);
            var Name2 = coolpropPlugin.GetStringParam(args[3], ref context);
            var Prop2 = coolpropPlugin.GetNumberParam(args[4], ref context);

            Unit.match(Name2, Prop2, context);
            var FluidName = coolpropPlugin.GetStringParam(args[5], ref context);
            var Result    = CoolPropDLLfunc(Output, Name1, Prop1.obj.ToDouble(), Name2, Prop2.obj.ToDouble(), FluidName);

            coolpropPlugin.LogInfo("[INFO ]",
                                   "Output = {0}, Name1 = {1}, Prop1 = {2}, Name2 = {3}, Prop2 = {4}, FluidName = {5}, Result = {6}",
                                   Output, Name1, Prop1.obj.ToDouble(), Name2, Prop2.obj.ToDouble(), FluidName, Result);
            result = coolpropPlugin.MakeDoubleResult(Result, Unit.Find(Output));

            return(true);
        }
Exemplo n.º 25
0
        public bool TryEvaluateExpression(Entry value, SMath.Math.Store context, out Entry result)
        {
            var Output = coolpropPlugin.GetStringParam(value.Items[0], context);
            var Name1  = coolpropPlugin.GetStringParam(value.Items[1], context);
            var Prop1  = coolpropPlugin.GetNumberParam(value.Items[2], context);

            Unit.match(Name1, Prop1, context);
            var Name2 = coolpropPlugin.GetStringParam(value.Items[3], context);
            var Prop2 = coolpropPlugin.GetNumberParam(value.Items[4], context);

            Unit.match(Name2, Prop2, context);
            var FluidName = coolpropPlugin.GetStringParam(value.Items[5], context);
            var Result    = CoolPropDLLfunc(Output, Name1, Prop1.obj.ToDouble(), Name2, Prop2.obj.ToDouble(), FluidName);

            coolpropPlugin.LogInfo("[INFO]",
                                   "Output = {0}, Name1 = {1}, Prop1 = {2}, Name2 = {3}, Prop2 = {4}, FluidName = {5}, Result = {6}",
                                   Output, Name1, Prop1.obj.ToDouble(), Name2, Prop2.obj.ToDouble(), FluidName, Result);

            result = coolpropPlugin.MakeDoubleResult(Result, Unit.Find(Output));

            return(true);
        }
Exemplo n.º 26
0
        bool SMath.Math.IPluginLowLevelEvaluation.ExpressionEvaluation(Term root, Term[][] args, ref SMath.Math.Store context, ref Term[] result)
        {
            if (root.Type != TermType.Function)
            {
                return(false);
            }

            foreach (var func in functions)
            {
                if (!func.Info.Equals(root))
                {
                    continue;
                }

                try {
                    return(func.ExpressionEvaluation(root, args, ref context, ref result));
                }
                catch (System.Exception ex) {
                    LogInfo("[ERROR]", "{0}({1}) {2}", root.Text, root.ChildCount, ex.Message);
                    throw;
                }
            }

            return(false);
        }
Exemplo n.º 27
0
 public static void matchHA(string param, SMath.Math.Numeric.TNumber val, SMath.Math.Store context)
 {
     matchInternal(FindHA(param), val, ref context);
 }
Exemplo n.º 28
0
        public static SMath.Math.Numeric.TNumber GetNumberParam(Term[] arg, ref SMath.Math.Store context)
        {
//      var arg1 = SMath.Math.Decision.Preprocessing(arg, ref context);
//      return SMath.Math.Numeric.Expression.Calculate(arg1, context).obj as SMath.Math.Numeric.TDouble;
            return(SMath.Math.Decision.NumericCalculation(arg, ref context));
        }