overview of functions provided#

// typedefs

typedef float spc_;
typedef double rpc_;
typedef int ipc_;

// structs

struct cro_control_type;
struct cro_inform_type;
struct cro_time_type;

// function calls

void cro_initialize(void **data, struct cro_control_type* control, ipc_ *status);
void cro_read_specfile(struct cro_control_type* control, const char specfile[]);

void cro_crossover_solution(
    void **data,
    struct cro_control_type* control,
    struct cro_inform_type* inform,
    ipc_ n,
    ipc_ m,
    ipc_ m_equal,
    ipc_ h_ne,
    const rpc_ H_val[],
    const ipc_ H_col[],
    const ipc_ H_ptr[],
    ipc_ a_ne,
    const rpc_ A_val[],
    const ipc_ A_col[],
    const ipc_ A_ptr[],
    const rpc_ g[],
    const rpc_ c_l[],
    const rpc_ c_u[],
    const rpc_ x_l[],
    const rpc_ x_u[],
    rpc_ x[],
    rpc_ c[],
    rpc_ y[],
    rpc_ z[],
    ipc_ x_stat[],
    ipc_ c_stat[]
);

void cro_terminate(
    void **data,
    struct cro_control_type* control,
    struct cro_inform_type* inform
);

typedefs#

typedef float spc_

spc_ is real single precision

typedef double rpc_

rpc_ is the real working precision used, but may be changed to float by defining the preprocessor variable REAL_32 or (if supported) to __real128 using the variable REAL_128.

typedef int ipc_

ipc_ is the default integer word length used, but may be changed to int64_t by defining the preprocessor variable INTEGER_64.

function calls#

void cro_initialize(void **data, struct cro_control_type* control, ipc_ *status)

Set default control values and initialize private data

Parameters:

data

holds private internal data

control

is a struct containing control information (see cro_control_type)

status

is a scalar variable of type ipc_, that gives the exit status from the package. Possible values are (currently):

  • 0

    The initialization was successful.

void cro_read_specfile(struct cro_control_type* control, const char specfile[])

Read the content of a specification file, and assign values associated with given keywords to the corresponding control parameters. An in-depth discussion of specification files is available, and a detailed list of keywords with associated default values is provided in $GALAHAD/src/cro/CRO.template. See also Table 2.1 in the Fortran documentation provided in $GALAHAD/doc/cro.pdf for a list of how these keywords relate to the components of the control structure.

Parameters:

control

is a struct containing control information (see cro_control_type)

specfile

is a character string containing the name of the specification file

void cro_crossover_solution(
    void **data,
    struct cro_control_type* control,
    struct cro_inform_type* inform,
    ipc_ n,
    ipc_ m,
    ipc_ m_equal,
    ipc_ h_ne,
    const rpc_ H_val[],
    const ipc_ H_col[],
    const ipc_ H_ptr[],
    ipc_ a_ne,
    const rpc_ A_val[],
    const ipc_ A_col[],
    const ipc_ A_ptr[],
    const rpc_ g[],
    const rpc_ c_l[],
    const rpc_ c_u[],
    const rpc_ x_l[],
    const rpc_ x_u[],
    rpc_ x[],
    rpc_ c[],
    rpc_ y[],
    rpc_ z[],
    ipc_ x_stat[],
    ipc_ c_stat[]
)

Crosover the solution from a primal-dual to a basic one.

Parameters:

control

is a struct whose members provide control paramters for the remaining prcedures (see cro_control_type). The parameter .status is as follows:

data

holds private internal data.

inform

is a struct containing output information (see cro_inform_type). The component .status gives the exit status from the package. Possible values are:

  • 0

    The crossover was successful.

  • -1

    An allocation error occurred. A message indicating the offending array is written on unit control.error, and the returned allocation status and a string containing the name of the offending array are held in inform.alloc_status and inform.bad_alloc respectively.

  • -2

    A deallocation error occurred. A message indicating the offending array is written on unit control.error and the returned allocation status and a string containing the name of the offending array are held in inform.alloc_status and inform.bad_alloc respectively.

  • -3

    The restrictions n > 0 or m >= m_equal >= 0 has been violated.

  • -4

    the bound constraints are inconsistent.

  • -5

    the general constraints are likely inconsistent.

  • -9

    an error has occured in SLS_analyse.

  • -10

    an error has occured in SLS_factorize.

  • -11

    an error has occured in SLS_solve.

  • -12

    an error has occured in ULS_factorize.

  • -14

    an error has occured in ULS_solve.

  • -16

    the residuals are large; the factorization may be unsatisfactory.

n

is a scalar variable of type ipc_, that holds the number of variables.

m

is a scalar variable of type ipc_, that holds the number of general linear constraints.

m_equal

is a scalar variable of type ipc_, that holds the number of general linear equality constraints. Such constraints must occur first in \(A\).

h_ne

is a scalar variable of type ipc_, that holds the number of entries in the lower triangular part of the Hessian matrix \(H\).

H_val

is a one-dimensional array of type rpc_, that holds the values of the entries of the lower triangular part of the Hessian matrix \(H\). The entries are stored by consecutive rows, the order within each row is unimportant.

H_col

is a one-dimensional array of type ipc_, that holds the column indices of the lower triangular part of \(H\), in the same order as those in H_val.

H_ptr

is a one-dimensional array of size n+1 and type ipc_, that holds the starting position of each row of the lower triangular part of \(H\). The n+1-st component holds the total number of entries (plus one if fortran indexing is used).

a_ne

is a scalar variable of type ipc_, that holds the number of entries in the constraint Jacobian matrix \(A\).

A_val

is a one-dimensional array of type rpc_, that holds the values of the entries of the constraint Jacobian matrix \(A\). The entries are stored by consecutive rows, the order within each row is unimportant. Equality constraints must be ordered first.

A_col

is a one-dimensional array of size A_ne and type ipc_, that holds the column indices of \(A\) in the same order as those in A_val.

A_ptr

is a one-dimensional array of size m+1 and type ipc_, that holds the starting position of each row of \(A\). The m+1-st component holds the total number of entries (plus one if fortran indexing is used).

g

is a one-dimensional array of size n and type rpc_, that holds the linear term \(g\) of the objective function. The j-th component of g, j = 0, … , n-1, contains \(g_j\).

c_l

is a one-dimensional array of size m and type rpc_, that holds the lower bounds \(c^l\) on the constraints \(A x\). The i-th component of c_l, i = 0, … , m-1, contains \(c^l_i\).

c_u

is a one-dimensional array of size m and type rpc_, that holds the upper bounds \(c^l\) on the constraints \(A x\). The i-th component of c_u, i = 0, … , m-1, contains \(c^u_i\).

x_l

is a one-dimensional array of size n and type rpc_, that holds the lower bounds \(x^l\) on the variables \(x\). The j-th component of x_l, j = 0, … , n-1, contains \(x^l_j\).

x_u

is a one-dimensional array of size n and type rpc_, that holds the upper bounds \(x^l\) on the variables \(x\). The j-th component of x_u, j = 0, … , n-1, contains \(x^l_j\).

x

is a one-dimensional array of size n and type rpc_, that holds the values \(x\) of the optimization variables. The j-th component of x, j = 0, … , n-1, contains \(x_j\).

c

is a one-dimensional array of size m and type rpc_, that holds the residual \(c(x) = A x\). The i-th component of c, j = 0, … , n-1, contains \(c_j(x)\).

y

is a one-dimensional array of size n and type rpc_, that holds the values \(y\) of the Lagrange multipliers for the general linear constraints. The j-th component of y, j = 0, … , n-1, contains \(y_j\).

z

is a one-dimensional array of size n and type rpc_, that holds the values \(z\) of the dual variables. The j-th component of z, j = 0, … , n-1, contains \(z_j\).

x_stat

is a one-dimensional array of size n and type ipc_, that must be set on entry to give the status of the problem variables. If x_stat(j) is negative, the variable \(x_j\) is active on its lower bound, if it is positive, it is active and lies on its upper bound, and if it is zero, it is inactiive and lies between its bounds. On exit, the \(j\) -th component of x_stat is -1 if the variable is basic and active on its lower bound, -2 it is non-basic but active on its lower bound, 1 if it is basic and active on its upper bound, 2 it is non-basic but active on its upper bound, and 0 if it is inactive.

c_stat

is a one-dimensional array of size m and type ipc_, that must be set on entry to give the status of the general linear constraints. If c_stat(i) is negative, the constraint value \(a_i^Tx\) is active on its lower bound, if it is positive, it is active and lies on its upper bound, and if it is zero, it is inactiive and lies between its bounds. On exit, the \(i\) -th component of x_stat is -1 if the constraint is basic and active on its lower bound, -2 it is non-basic but active on its lower bound, 1 if it is basic and active on its upper bound, 2 it is non-basic but active on its upper bound, and 0 if it is inactive.

void cro_terminate(
    void **data,
    struct cro_control_type* control,
    struct cro_inform_type* inform
)

Deallocate all internal private storage

Parameters:

data

holds private internal data

control

is a struct containing control information (see cro_control_type)

inform

is a struct containing output information (see cro_inform_type)