Class ExpandableStatefulODE


  • public class ExpandableStatefulODE
    extends Object
    This class represents a combined set of first order differential equations, with at least a primary set of equations expandable by some sets of secondary equations.

    One typical use case is the computation of the Jacobian matrix for some ODE. In this case, the primary set of equations corresponds to the raw ODE, and we add to this set another bunch of secondary equations which represent the Jacobian matrix of the primary set.

    We want the integrator to use only the primary set to estimate the errors and hence the step sizes. It should not use the secondary equations in this computation. The integrator will be able to know where the primary set ends and so where the secondary sets begin.

    Since:
    3.0
    See Also:
    FirstOrderDifferentialEquations, JacobianMatrices
    • Constructor Detail

      • ExpandableStatefulODE

        public ExpandableStatefulODE​(FirstOrderDifferentialEquations primary)
        Build an expandable set from its primary ODE set.
        Parameters:
        primary - the primary set of differential equations to be integrated.
    • Method Detail

      • getPrimary

        public FirstOrderDifferentialEquations getPrimary()
        Get the primary set of differential equations.
        Returns:
        primary set of differential equations
      • getTotalDimension

        public int getTotalDimension()
        Return the dimension of the complete set of equations.

        The complete set of equations correspond to the primary set plus all secondary sets.

        Returns:
        dimension of the complete set of equations
      • computeDerivatives

        public void computeDerivatives​(double t,
                                       double[] y,
                                       double[] yDot)
                                throws MaxCountExceededException,
                                       DimensionMismatchException
        Get the current time derivative of the complete state vector.
        Parameters:
        t - current value of the independent time variable
        y - array containing the current value of the complete state vector
        yDot - placeholder array where to put the time derivative of the complete state vector
        Throws:
        MaxCountExceededException - if the number of functions evaluations is exceeded
        DimensionMismatchException - if arrays dimensions do not match equations settings
      • addSecondaryEquations

        public int addSecondaryEquations​(SecondaryEquations secondary)
        Add a set of secondary equations to be integrated along with the primary set.
        Parameters:
        secondary - secondary equations set
        Returns:
        index of the secondary equation in the expanded state
      • getPrimaryMapper

        public EquationsMapper getPrimaryMapper()
        Get an equations mapper for the primary equations set.
        Returns:
        mapper for the primary set
        See Also:
        getSecondaryMappers()
      • getSecondaryMappers

        public EquationsMapper[] getSecondaryMappers()
        Get the equations mappers for the secondary equations sets.
        Returns:
        equations mappers for the secondary equations sets
        See Also:
        getPrimaryMapper()
      • setTime

        public void setTime​(double time)
        Set current time.
        Parameters:
        time - current time
      • getTime

        public double getTime()
        Get current time.
        Returns:
        current time
      • setPrimaryState

        public void setPrimaryState​(double[] primaryState)
                             throws DimensionMismatchException
        Set primary part of the current state.
        Parameters:
        primaryState - primary part of the current state
        Throws:
        DimensionMismatchException - if the dimension of the array does not match the primary set
      • getPrimaryState

        public double[] getPrimaryState()
        Get primary part of the current state.
        Returns:
        primary part of the current state
      • getPrimaryStateDot

        public double[] getPrimaryStateDot()
        Get primary part of the current state derivative.
        Returns:
        primary part of the current state derivative
      • getSecondaryState

        public double[] getSecondaryState​(int index)
        Get secondary part of the current state.
        Parameters:
        index - index of the part to set as returned by addSecondaryEquations(SecondaryEquations)
        Returns:
        secondary part of the current state
      • getSecondaryStateDot

        public double[] getSecondaryStateDot​(int index)
        Get secondary part of the current state derivative.
        Parameters:
        index - index of the part to set as returned by addSecondaryEquations(SecondaryEquations)
        Returns:
        secondary part of the current state derivative
      • setCompleteState

        public void setCompleteState​(double[] completeState)
                              throws DimensionMismatchException
        Set the complete current state.
        Parameters:
        completeState - complete current state to copy data from
        Throws:
        DimensionMismatchException - if the dimension of the complete state does not match the complete equations sets dimension
      • getCompleteState

        public double[] getCompleteState()
                                  throws DimensionMismatchException
        Get the complete current state.
        Returns:
        complete current state
        Throws:
        DimensionMismatchException - if the dimension of the complete state does not match the complete equations sets dimension