public override double[] GetTwoPhasePropList(string propName, Phases phase1, Phases phase2, PropertyBasis basis, bool calculate = true)
        {
            CasterLogger.Debug($"Get property {propName} for phase {phase1} and {phase2}");

            object value = null;

            if (PresentPhases.All(p => p.Value != phase1.Value) ||
                PresentPhases.All(p => p.Value != phase2.Value))
            {
                return(new double[CompoundNum]);
            }

            string[] phaseList = { phase1.Value, phase2.Value };
            try
            {
                _capeThermoPropertyRoutine.CalcTwoPhaseProp(new[] { propName }, phaseList);
            }
            catch (Exception e)
            {
                Debug.WriteLine("Calculate two phase prop {0} fails. {1}", propName, e.Message);
            }
            _capeThermoMaterial.GetTwoPhaseProp(propName, phaseList, basis.ToString(), ref value);
            CasterLogger.Debug($"Property {propName} result: {value}");
            return(value as double[]);
        }
        public override double[] GetSinglePhasePropList(string propName, Phases phase, PropertyBasis basis, bool calculate = true)
        {
            CasterLogger.Debug($"Get property {propName} for phase {phase}");
            object value = null;

            if (PresentPhases.All(p => p.Value != phase.Value))
            {
                return(new double[CompoundNum]);     //default is 0 for every element
            }
            try
            {
                if (calculate)
                {
                    _capeThermoPropertyRoutine.CalcSinglePhaseProp(new[] { propName }, phase.Value);
                }
            }
            catch (Exception e)
            {
                CasterLogger.ErrorFormatted("Calculate single phase prop {0} fails. {1}", propName, e.Message);
                Debug.WriteLine("Calculate single phase prop {0} fails. {1}", propName, e.Message);
            }
            _capeThermoMaterial.GetSinglePhaseProp(propName, phase.Value, basis.ToString(), ref value);
            CasterLogger.Debug($"Property {propName} result: {value}");
            return(value as double[]);
        }
        /// <summary>
        /// get single phase property, return a double number, will try to calculate property first, if not present, return 0; if property is an array, throw exception
        /// </summary>
        public double GetSinglePhasePropDouble(string propName, Phases phase, PropertyBasis basis, bool calculate = true)
        {
            CasterLogger.Debug($"GetSinglePhasePropDouble for {propName} in {phase} Calculate: {calculate}");
            if (PresentPhases.All(p => p.Value != phase.Value))
            {
                return(0);
            }
            var result = GetSinglePhasePropList(propName, phase, basis, calculate).SingleOrDefault();

            CasterLogger.Debug($"GetSinglePhasePropDouble result: {result}");
            return(result);
        }
 public override void SetSinglePhasePropList(string propName, Phases phase, PropertyBasis basis, IEnumerable <double> value)
 {
     CasterLogger.Debug($"Set property {propName} for phase {phase}: {value}");
     if (PresentPhases.All(p => p.Value != phase.Value))
     {
         PresentPhases = AllowedPhases;
     }
     double[] temp = value as double[] ?? value.ToArray();
     _capeThermoMaterial.SetSinglePhaseProp(propName, phase.Value, basis.ToString(), temp);
     //_alreadyFlashed = false;
     CasterLogger.Debug($"Set property complete");
 }