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(); }
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); }
/// <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); }
/// <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); }
internal override void InitializeFunctionAndJacobian(OdeFunction fun, OdeJacobian jac) { this.fvpol = new FVPOL(this._NEquations, fun); this.jvpol = new JVPOL(this._NEquations, jac); }
internal JVPOL(int NEq, OdeJacobian Jac) { this.MeNEq = NEq; this.MeY = new double[NEq]; this.MeJacobian = Jac; }
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(); }
internal abstract void InitializeFunctionAndJacobian(OdeFunction fun ,OdeJacobian jac);
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); }
/// <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; }
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); }
/// <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); }
/// <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; }
/// <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 JVPOL(int NEq, OdeJacobian Jac) { this.MeNEq = NEq; this.MeY = new double[NEq]; this.MeJacobian = Jac; this.MeJac = new double[NEq, NEq]; }