HyperWorks Solvers

GSESUB/GSEXX/GSEXU/GSEYX/GSEYU

GSESUB/GSEXX/GSEXU/GSEYX/GSEYU

Previous topic Next topic No expanding text in this topic  

GSESUB/GSEXX/GSEXU/GSEYX/GSEYU

Previous topic Next topic JavaScript is required for expanding text JavaScript is required for the print function  

Subroutine Type

Modeling

Definition

Used to represent any generic system that has defined inputs, internal states, and outputs.  It can be used to model a nonlinear time varying system.  Typically, a General State Equation can be used to integrate automatic control theory or third party software packages.  In its most generic implementation, a GSESUB is used to represent an arbitrary system of algebraic or differential equations.

Use

General state equation entity:

 

<Control_StateEqn

    id                  = "301001"

    type                = "USERSUB"

    x_solver_array_id   = "30100200"

    y_solver_array_id   = "30100300"

    u_solver_array_id   = "30100100"

    ic_solver_array_id  = "0"

    num_state           = "2"

    num_output          = "1"

    usrsub_param_string = "USER(0,1,-10,.1,10,0,0,1)"

    usrsub_dll_name     = "NULL"

    is_static_hold      = "FALSE"

 />

Calling Syntax

Fortran

SUBROUTINE GSESUB (ID, TIME, PAR, NPAR, DFLAG, IFLAG,NSTATE, STATES, NINPUT, INPUT, NOUTPT, STATED, OUTPUT)

SUBROUTINE GSEXU (ID, TIME, PAR, NPAR, IFLAG, NSTATE,STATES, NINPUT, INPUT, NOUTPT, PXUMAT)

SUBROUTINE GSEXX (ID, TIME, PAR, NPAR, IFLAG, NSTATE,STATES, NINPUT, INPUT, NOUTPT, PXXMAT)

SUBROUTINE GSEYU (ID, TIME, PAR, NPAR, IFLAG, NSTATE, STATES, NINPUT, INPUT, NOUTPT, PYUMAT)

SUBROUTINE GSEYX (ID, TIME, PAR, NPAR, IFLAG, NSTATE, STATES, NINPUT, INPUT, NOUTPT, PYXMAT)

 

C

void STDCALL GSESUB (int *id, double *time, double *par, int *npar,int *dflag, int *iflag, int *nstate, double *states,int *ninput, double *input, int *noutpt, double *stated,double *output)

void STDCALL GSEXU (int *id, double *time, double *par, int *npar, int *iflag, int *nstate,double *states, int *ninput, double *input, int *noutpt, double *pxumat)

void STDCALL GSEXX (int *id, double *time, double *par, int *npar, int *iflag, int *nstate,double *states, int *ninput, double *input, int *noutpt, double *pxxmat)

void STDCALL GSEYU (int *id, double *time, double *par, int *npar, int *iflag, int *nstate, double *states, int *ninput, double *input, int *noutpt, double *pyumat)

 

void STDCALL GSEYX (int *id, double *time, double *par, int *npar, int *iflag, int *nstate, double *states, int *ninput, double *input, int *noutpt, double *pyxmat)

 

Python

def GSESUB(id, time, par, npar, dflag, iflag, nstate, states, ninput, input, noutpt):

    return [stated, output]

def GSEXU(id, time, par, npar, iflag, nstate, states, ninput, input, noutpt):

    return pxumat

def GSEXX(id, time, par, npar, iflag, nstate, states, ninput, input, noutpt):

    return pxxmat

 

def GSEYU(id, time, par, npar, iflag, nstate, states, ninput, input, noutpt):

    return pyumat

def GSEYX(id, time, par, npar, iflag, nstate, states, ninput, input, noutpt):

    return pyxmat

 

MATLAB

function [stated, output] = GSESUB(id, time, par, npar, dflag, iflag, nstate, states, ninput, input, noutpt)

function pxumat = GSEXU(id, time, par, npar, iflag, nstate, states, ninput, input, noutpt)

function pxxmat = GSEXX(id, time, par, npar, iflag, nstate, states, ninput, input, noutpt)

function pyumat = GSEYU(id, time, par, npar, iflag, nstate, states, ninput, input, noutpt)

function pyxmat = GSEYX(id, time, par, npar, iflag, nstate, states, ninput, input, noutpt)

GSESUB evaluates the f and g functions in the following general state equation:

x' = f(x,u,t)

y  = g(x,u,t)

where x is the vector of states, x' is the vector of state derivatives, u is the input, and y is the output.

Input Arguments

[integer] ID

The general force element identifier.

 

[double precision] TIME

The current simulation time.

 

[double precision] PAR

An array that contains the constant arguments from the list provided in the user-defined statement.

 

[integer] NPAR

The number of entries in the PAR array.

 

[logical] DFLAG

The differencing flag.

 

[logical] IFLAG

The initialization flag.

 

[integer] NSTATE

The number of state variables taken from the num_state attribute of the Control_StateEqn entity.

 

[double precision] STATES

An array of size NSTATE containing current values of state variables.

 

[integer] NINPUT

The size of the input (U) array.

 

[double precision] INPUT

An array containing the current values of the inputs.

 

[integer] NOUTPT

The number of outputs taken from the num_output attribute of the Control_StateEqn entity.

Output Values

[double precision] STATED

Array of size NSTATE containing the current values of the derivatives of the state variables.

 

[double precision] OUTPUT

An array of size NOUTPT containing current values of the derivatives of outputs.

Example

def GSESUB(id, time, par, npar, dflag, iflag, nstate, states, ninput, input, noutpt):

 

    stated = []

    for i in xrange(nstate):

        stated.append(0.0)

    output = []

    for i in xrange(noutpt):

         output.append(0.0)

         ax = int(par[1])

         au = int(par[2])

         A = [[0.00.0], [0.00.0]]

         A[0][0] = -1.0e3

         A[0][1] = -2.0e4

         A[1][0] =  0.0

         A[1][1] = -1.0e3

         B = []

         B.append([0.0, -1.0])

         B.append([1.00.0])

         C = []

         C.append(1.0e3)

         C.append(0.0)

         stated[0] = A[0][0]*states[0] + A[0][1]*states[1] + B[0][0]*input[0] + B          [0][1]*input[1]

         stated[1] = A[1][0]*states[0] + A[1][1]*states[1] + B[1][0]*input[0] + B          [1][1]*input[1]

         output[0] = C[0]*states[0] + C[1]*states[1];

 

    return [stated, output]

 

def GSEXX(id, time, par, npar, iflag, nstate, states, ninput, input, noutpt):

 

    pxxmat = []

    for i in xrange(nstate*nstate):

        pxxmat.append(0.0)

        pxxmat[0] = -1.0e3

        pxxmat[1] =  0.0

        pxxmat[2] = -2.0e4

        pxxmat[3] = -1.0e3

 

    return pxxmat

 

def GSEXU(id, time, par, npar, iflag, nstate, states, ninput, input, noutpt):

 

        pxumat = []

    for i in xrange(nstate*ninput):

        pxumat.append(0.0)

        pxumat[0] =  0.0

        pxumat[1] =  1.0

        pxumat[2] = -1.0

        pxumat[3] =  0.0

 

    return pxumat

See Also:

Modeling Subroutines