示例#1
0
        public Flow RateFunction(ReactionValue reaction)
        {
            Flow monomial = NumberFlow.numberFlowOne;

            if (reaction.rate is MassActionNumericalRate)
            {
                double rate = ((MassActionNumericalRate)reaction.rate).Rate(this.temperature);
                foreach (SpeciesValue sp in sample.stateMap.species)
                {
                    int spStoichio = reaction.Stoichiometry(sp.symbol, reaction.reactants);
                    monomial = OpFlow.Op("*", monomial, OpFlow.Op("^", new SpeciesFlow(sp.symbol), new NumberFlow(spStoichio)));
                }
                monomial = OpFlow.Op("*", new NumberFlow(rate), monomial);
            }
            else if (reaction.rate is MassActionFlowRate)
            {
                Flow rate = (reaction.rate as MassActionFlowRate).rateFunction;
                foreach (SpeciesValue sp in sample.stateMap.species)
                {
                    int spStoichio = reaction.Stoichiometry(sp.symbol, reaction.reactants);
                    monomial = OpFlow.Op("*", monomial, OpFlow.Op("^", new SpeciesFlow(sp.symbol), new NumberFlow(spStoichio)));
                }
                monomial = OpFlow.Op("*", rate, monomial);
            }
            else if (reaction.rate is GeneralFlowRate)
            {
                monomial = (reaction.rate as GeneralFlowRate).rateFunction;
            }
            else
            {
                throw new Error("RateFunction");
            }
            return(monomial);
        }