Beispiel #1
0
        internal virtual void InitializeInternal(OdeFunction function, OdeJacobian jacobian, int numEquations)
        {
            //this.MeIsInitialized = true;

            //if (this.MeIsInitialized == false)
            //{
            //    throw new ArgumentException("Please call the Inizialize method first.");
            //}

            _InvokeInitializeODEs = false;

            InitializeSizeDependentVariables(numEquations);
            InitializeFunctionAndJacobian(function, jacobian);
            InitializeExceptionMessages();
        }
Beispiel #2
0
        internal void InitializeRungeKutta(OdeFunction function, OdeJacobian jacobian, int numEquations)
        {
            //internal void InitializeRungeKutta(OdeFunction function, OdeJacobian jacobian, double[] y0, double t0, double deltaT, double tEnd)
            //this.TestArguments(t0, deltaT, tEnd);

            //this.MeT0 = t0;
            //this.MeY0 = y0;
            //this.MeTf = tEnd;

            InitializeInternal(function, jacobian, numEquations);

            // IOUT=2: DENSE OUTPUT IS PERFORMED IN SOLOUTR
            // (IN THIS CASE WORK(5) MUST BE SPECIFIED)
            if (_IOut == 2)
            {
                _IWork[4] = numEquations;
            }

            //this.SetSolutionDimension(y0, t0, deltaT, tEnd);
        }
Beispiel #3
0
		/// <summary>
		/// Initializes a new instance of the OdeGearsBDF class.
		/// </summary>
		/// <param name="function">A function that evaluates the right side of the differential equations.</param>
		/// <param name="jacobian">A function that evaluates the jacobian matrix.</param>
		/// <param name="numEquations">The number of differential equations.</param>
		public OdeGearsBDF(OdeFunction function, OdeJacobian jacobian, int numEquations)
		{
			base.InitializationWithJacobian(function, jacobian, numEquations);
		}
Beispiel #4
0
		/// <summary>
		/// Method that initialize the ODE to solve.
		/// </summary>
		/// <param name="function">A function that evaluates the right side of the differential equations.</param>
		/// <param name="jacobian">A function that evaluates the jacobian matrix.</param>
		/// <param name="numEquations">The number of differential equations.</param>
		/// <param name="t0">The initial value for the independent variable.</param>
		/// <param name="y0">A vector of size N containing the initial conditions. N is the number of differential equations.</param>
		public void InitializeODEs(OdeFunction function, OdeJacobian jacobian, int numEquations, double t0, double[] y0)
		{
			base.InitializationWithJacobian(function, jacobian, numEquations);
			this.SetInitialValues(t0, y0);
		}
        public void ODEGearsBDFJacobian()
        {
            // Problem from chemical kinetics. Consists of the following three rate equations:
            //     dy1/dt = -.04*y1 + 1.e4*y2*y3
            //     dy2/dt = .04*y1 - 1.e4*y2*y3 - 3.e7*y2**2
            //     dy3/dt = 3.e7*y2**2
            // on the interval from t = 0.0 to t = 4.e10, with initial conditions
            // y1 = 1.0, y2 = y3 = 0.  The problem is stiff.

            //using DotNumerics.ODE

            double[] y = new double[3];
            y[0] = 1.0;
            y[1] = 0.0;
            y[2] = 0.0;

            OdeFunction YDot = new OdeFunction(RateEquations);
            OdeJacobian jac  = new OdeJacobian(JacRateEquations);
            OdeGearsBDF bdf  = new OdeGearsBDF(YDot, jac, 3);

            bdf.SetInitialValues(0, y);

            bdf.RelTolArray[0] = 1.0E-4;
            bdf.RelTolArray[1] = 1.0E-4;
            bdf.RelTolArray[2] = 1.0E-4;

            bdf.AbsTolArray[0] = 1.0E-8;
            bdf.AbsTolArray[1] = 1.0E-14;
            bdf.AbsTolArray[2] = 1.0E-6;

            double TOut = 0.4;

            for (int IOUT = 1; IOUT <= 12; IOUT++)
            {
                y = bdf.Solve(TOut);
                ObjectDumper.Write("t = " + TOut.ToString() + "  y = " + y[0].ToString() + "  " + y[1].ToString() + "  " + y[2].ToString());
                TOut = TOut * 10.0;
            }

            //private double[] RateEquations(double t, double[] y)
            //{
            //    double[] dydt = new double[3];
            //    dydt[0] = -.04E0 * y[0] + 1.0E4 * y[1] * y[2];
            //    dydt[2] = 3.0E7 * y[1] * y[1];
            //    dydt[1] = -dydt[0] - dydt[2];
            //    return dydt;
            //}

            //public double[,] JacRateEquations(double t, double[] y)
            //{
            //    double[,] jacobian = new double[y.Length, y.Length];
            //    jacobian[0, 0] = -.04E0;
            //    jacobian[0, 1] = 1.0E4 * y[2];
            //    jacobian[0, 2] = 1.0E4 * y[1];
            //    jacobian[1, 0] = .04E0;
            //    jacobian[1, 2] = -jacobian[0, 2];
            //    jacobian[2, 1] = 6.0E7 * y[1];
            //    jacobian[1, 1] = -jacobian[0, 1] - jacobian[2, 1];
            //    return jacobian;
            //}
        }
        /// <summary>
        /// Method that initialize the ODE to solve.
        /// </summary>
        /// <param name="function">A function that evaluates the right side of the differential equations.</param>
        /// <param name="jacobian">A function that evaluates the jacobian matrix.</param>
        /// <param name="numEquations">The number of differential equations.</param>
        /// <param name="t0">The initial value for the independent variable.</param>
        /// <param name="y0">A vector of size N containing the initial conditions. N is the number of differential equations.</param>
        public void InitializeODEs(OdeFunction function, OdeJacobian jacobian, int numEquations, double t0, double[] y0)
        {
            this._IOut = 1;
            this.MeIJAC = 1;
            base.InitializeRungeKutta(function, jacobian, numEquations);

            this.SetInitialValues(t0, y0);
        }
        /// <summary>
        /// Initializes a new instance of the OdeImplicitRungeKutta5 class.
        /// </summary>
        /// <param name="function">A function that evaluates the right side of the differential equations.</param>
        /// <param name="jacobian">A function that evaluates the jacobian matrix.</param>
        /// <param name="numEquations">The number of differential equations.</param>
        public OdeImplicitRungeKutta5(OdeFunction function, OdeJacobian jacobian, int numEquations)
        {
            this.InitializeRungeKuttaClasses();

            // C     IOUT        SWITCH FOR CALLING THE SUBROUTINE SOLOUTR:
            // C                    IOUT=0: SUBROUTINE IS NEVER CALLED
            // C
            this._IOut = 1;
            this.MeIJAC = 1;
            base.InitializeRungeKutta(function, jacobian, numEquations);
        }
 internal override void InitializeFunctionAndJacobian(OdeFunction fun, OdeJacobian jac)
 {
     _fex = new FEX(this._NEquations, fun);
     _jex = new JEX(this._NEquations, jac);
 }
 internal override void InitializeFunctionAndJacobian(OdeFunction fun, OdeJacobian jac)
 {
     this._Faren = new FAREN(this._NEquations, fun);
 }
Beispiel #10
0
 internal override void InitializeFunctionAndJacobian(OdeFunction fun, OdeJacobian jac)
 {
     this.fvpol = new FVPOL(this._NEquations, fun);
     this.jvpol = new JVPOL(this._NEquations, jac);
 }
Beispiel #11
0
 internal JVPOL(int NEq, OdeJacobian Jac)
 {
     this.MeNEq      = NEq;
     this.MeY        = new double[NEq];
     this.MeJacobian = Jac;
 }
Beispiel #12
0
        internal virtual void InitializeInternal(OdeFunction function, OdeJacobian jacobian, int numEquations)
        {
            //this.MeIsInitialized = true;

            //if (this.MeIsInitialized == false)
            //{
            //    throw new ArgumentException("Please call the Inizialize method first.");
            //}

            this._InvokeInitializeODEs = false;

            this.InitializeSizeDependentVariables(numEquations);
            this.InitializeFunctionAndJacobian(function, jacobian);
            this.InitializeExceptionMessages();
        }
Beispiel #13
0
 internal abstract void InitializeFunctionAndJacobian(OdeFunction fun ,OdeJacobian jac);
Beispiel #14
0
        internal void InitializeRungeKutta(OdeFunction function, OdeJacobian jacobian, int numEquations)
        {
            //internal void InitializeRungeKutta(OdeFunction function, OdeJacobian jacobian, double[] y0, double t0, double deltaT, double tEnd)
            //this.TestArguments(t0, deltaT, tEnd);

            //this.MeT0 = t0;
            //this.MeY0 = y0;
            //this.MeTf = tEnd;

            this.InitializeInternal(function, jacobian, numEquations);

            // IOUT=2: DENSE OUTPUT IS PERFORMED IN SOLOUTR
            // (IN THIS CASE WORK(5) MUST BE SPECIFIED)
            if (this._IOut == 2)
            {
                this._IWork[4] = numEquations;
            }

            //this.SetSolutionDimension(y0, t0, deltaT, tEnd);
        }
Beispiel #15
0
		/// <summary>
		/// Method that initialize the ODE to solve.
		/// </summary>
		/// <param name="function">A function that evaluates the right side of the differential equations.</param>
		/// <param name="jacobian">A function that evaluates the jacobian matrix.</param>
		/// <param name="numEquations">The number of differential equations.</param>
		public void InitializeODEs(OdeFunction function, OdeJacobian jacobian, int numEquations)
		{
			base.InitializationWithJacobian(function, jacobian, numEquations);

			this._InvokeSetInitialValues = true;
		}
Beispiel #16
0
 internal abstract void InitializeFunctionAndJacobian(OdeFunction fun, OdeJacobian jac);
 internal override void InitializeFunctionAndJacobian(OdeFunction fun, OdeJacobian jac)
 {
     _fex = new FEX(_NEquations, fun);
     _jex = new JEX(_NEquations, jac);
 }
Beispiel #18
0
 /// <summary>
 /// Method that initialize the ODE to solve.
 /// </summary>
 /// <param name="function">A function that evaluates the right side of the differential equations.</param>
 /// <param name="jacobian">A function that evaluates the jacobian matrix.</param>
 /// <param name="numEquations">The number of differential equations.</param>
 /// <param name="t0">The initial value for the independent variable.</param>
 /// <param name="y0">A vector of size N containing the initial conditions. N is the number of differential equations.</param>
 public void InitializeODEs(OdeFunction function, OdeJacobian jacobian, int numEquations, double t0, double[] y0)
 {
     base.InicializacionWithJacobiano(function, jacobian, numEquations);
     this.SetInitialValues(t0, y0);
 }
        /// <summary>
        /// Inicialize the ODE solver with a Jacobiano
        /// </summary>
        /// <param name="Func">The function that define the ODEs.</param>
        /// <param name="Jac">The Ode type (stiff, nonstiff).</param>
        /// <param name="numEquations">The number of equatins.</param>
        protected internal void InicializacionWithJacobiano(OdeFunction Func, OdeJacobian Jac , int numEquations)
        {
            //dvode = new DVODE();

            this._IState = 1;
            this._UserJacobian = true;
            this._Type = ODEType.Stiff;

            base.InitializeInternal(Func, Jac, numEquations);
        }
Beispiel #20
0
 /// <summary>
 /// Initializes a new instance of the OdeGearsBDF class.
 /// </summary>
 /// <param name="function">A function that evaluates the right side of the differential equations.</param>
 /// <param name="jacobian">A function that evaluates the jacobian matrix.</param>
 /// <param name="numEquations">The number of differential equations.</param>
 public OdeGearsBDF(OdeFunction function, OdeJacobian jacobian, int numEquations)
 {
     base.InicializacionWithJacobiano(function, jacobian, numEquations);
 }
 internal JEX(int NEq, OdeJacobian Jac)
 {
     this.MeNEq = NEq;
     this.MeY = new double[NEq];
     this.MeJacobian = Jac;
 }
Beispiel #22
0
        /// <summary>
        /// Method that initialize the ODE to solve.
        /// </summary>
        /// <param name="function">A function that evaluates the right side of the differential equations.</param>
        /// <param name="jacobian">A function that evaluates the jacobian matrix.</param>
        /// <param name="numEquations">The number of differential equations.</param>
        public void InitializeODEs(OdeFunction function, OdeJacobian jacobian, int numEquations)
        {
            base.InicializacionWithJacobiano(function, jacobian, numEquations);

            this._InvokeSetInitialValues = true;
        }
        /// <summary>
        /// Method that initialize the ODE to solve.
        /// </summary>
        /// <param name="function">A function that evaluates the right side of the differential equations.</param>
        /// <param name="jacobian">A function that evaluates the jacobian matrix.</param>
        /// <param name="numEquations">The number of differential equations.</param>
        public void InitializeODEs(OdeFunction function, OdeJacobian jacobian, int numEquations)
        {
            this._IOut = 1;
            this.MeIJAC = 1;
            base.InitializeRungeKutta(function, jacobian, numEquations);

            this._InvokeSetInitialValues = true;
        }
 internal override void InitializeFunctionAndJacobian(OdeFunction fun, OdeJacobian jac)
 {
     this._Faren = new FAREN(this._NEquations, fun);
 }
 internal override void InitializeFunctionAndJacobian(OdeFunction fun, OdeJacobian jac)
 {
     this.fvpol = new FVPOL(this._NEquations, fun);
     this.jvpol = new JVPOL(this._NEquations, jac);
 }
Beispiel #26
0
		internal JVPOL(int NEq, OdeJacobian Jac)
		{
			this.MeNEq = NEq;
			this.MeY = new double[NEq];
			this.MeJacobian = Jac;
			this.MeJac = new double[NEq, NEq];
		}