00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef HSLLOADER_H_
00011 #define HSLLOADER_H_
00012
00013 #include "IpoptConfig.h"
00014
00015 #ifdef __cplusplus
00016 extern "C" {
00017 #endif
00018
00019 #ifndef ma77_default_control
00020 #define ma77_control ma77_control_d
00021 #define ma77_info ma77_info_d
00022 #define ma77_default_control ma77_default_control_d
00023 #define ma77_open_nelt ma77_open_nelt_d
00024 #define ma77_open ma77_open_d
00025 #define ma77_input_vars ma77_input_vars_d
00026 #define ma77_input_reals ma77_input_reals_d
00027 #define ma77_analyse ma77_analyse_d
00028 #define ma77_factor ma77_factor_d
00029 #define ma77_factor_solve ma77_factor_solve_d
00030 #define ma77_solve ma77_solve_d
00031 #define ma77_resid ma77_resid_d
00032 #define ma77_scale ma77_scale_d
00033 #define ma77_enquire_posdef ma77_enquire_posdef_d
00034 #define ma77_enquire_indef ma77_enquire_indef_d
00035 #define ma77_alter ma77_alter_d
00036 #define ma77_restart ma77_restart_d
00037 #define ma77_finalise ma77_finalise_d
00038 #endif
00039
00040 struct ma77_control;
00041 struct ma77_info;
00042 typedef double ma77pkgtype_d_;
00043
00044
00045 #ifndef ma86_default_control
00046 #define ma86_control ma86_control_d
00047 #define ma86_info ma86_info_d
00048 #define ma86_default_control ma86_default_control_d
00049 #define ma86_analyse ma86_analyse_d
00050 #define ma86_factor ma86_factor_d
00051 #define ma86_factor_solve ma86_factor_solve_d
00052 #define ma86_solve ma86_solve_d
00053 #define ma86_finalise ma86_finalise_d
00054 #endif
00055
00056 struct ma86_control;
00057 struct ma86_info;
00058 typedef double ma86pkgtype_d_;
00059 typedef double ma86realtype_d_;
00060
00061 #ifndef ma97_default_control
00062 #define ma97_control ma97_control_d
00063 #define ma97_info ma97_info_d
00064 #define ma97_default_control ma97_default_control_d
00065 #define ma97_analyse ma97_analyse_d
00066 #define ma97_factor ma97_factor_d
00067 #define ma97_factor_solve ma97_factor_solve_d
00068 #define ma97_solve ma97_solve_d
00069 #define ma97_finalise ma97_finalise_d
00070 #define ma97_free_akeep ma97_free_akeep_d
00071 #endif
00072
00073 struct ma97_control;
00074 struct ma97_info;
00075 typedef double ma97pkgtype_d_;
00076 typedef double ma97realtype_d_;
00077
00078 struct mc68_control_i;
00079 struct mc68_info_i;
00080
00081 #ifndef __IPTYPES_HPP__
00082
00083 typedef FORTRAN_INTEGER_TYPE ipfint;
00084 #endif
00085
00086 typedef void (*ma27ad_t)(ipfint *N, ipfint *NZ, const ipfint *IRN, const ipfint* ICN,
00087 ipfint *IW, ipfint* LIW, ipfint* IKEEP, ipfint *IW1,
00088 ipfint* NSTEPS, ipfint* IFLAG, ipfint* ICNTL,
00089 double* CNTL, ipfint *INFO, double* OPS);
00090 typedef void (*ma27bd_t)(ipfint *N, ipfint *NZ, const ipfint *IRN, const ipfint* ICN,
00091 double* A, ipfint* LA, ipfint* IW, ipfint* LIW,
00092 ipfint* IKEEP, ipfint* NSTEPS, ipfint* MAXFRT,
00093 ipfint* IW1, ipfint* ICNTL, double* CNTL,
00094 ipfint* INFO);
00095 typedef void (*ma27cd_t)(ipfint *N, double* A, ipfint* LA, ipfint* IW,
00096 ipfint* LIW, double* W, ipfint* MAXFRT,
00097 double* RHS, ipfint* IW1, ipfint* NSTEPS,
00098 ipfint* ICNTL, double* CNTL);
00099 typedef void (*ma27id_t)(ipfint* ICNTL, double* CNTL);
00100
00101 typedef void (*ma28ad_t)(void* nsize, void* nz, void* rw, void* licn, void* iw,
00102 void* lirn, void* iw2, void* pivtol, void* iw3, void* iw4, void* rw2, void* iflag);
00103
00104 typedef void (*ma57ad_t) (
00105 ipfint *n,
00106 ipfint *ne,
00107 const ipfint *irn,
00108 const ipfint *jcn,
00109 ipfint *lkeep,
00110 ipfint *keep,
00111
00112 ipfint *iwork,
00113 ipfint *icntl,
00114 ipfint *info,
00115 double *rinfo);
00116
00117 typedef void (*ma57bd_t) (
00118 ipfint *n,
00119 ipfint *ne,
00120 double *a,
00121 double *fact,
00122 ipfint *lfact,
00123 ipfint *ifact,
00124 ipfint *lifact,
00125 ipfint *lkeep,
00126 ipfint *keep,
00127 ipfint *iwork,
00128 ipfint *icntl,
00129 double *cntl,
00130 ipfint *info,
00131 double *rinfo);
00132
00133 typedef void (*ma57cd_t) (
00134 ipfint *job,
00135 ipfint *n,
00136 double *fact,
00137 ipfint *lfact,
00138 ipfint *ifact,
00139 ipfint *lifact,
00140 ipfint *nrhs,
00141 double *rhs,
00142 ipfint *lrhs,
00143 double *work,
00144 ipfint *lwork,
00145 ipfint *iwork,
00146 ipfint *icntl,
00147 ipfint *info);
00148
00149 typedef void (*ma57ed_t) (
00150 ipfint *n,
00151 ipfint *ic,
00152 ipfint *keep,
00153 double *fact,
00154 ipfint *lfact,
00155 double *newfac,
00156 ipfint *lnew,
00157 ipfint *ifact,
00158 ipfint *lifact,
00159 ipfint *newifc,
00160 ipfint *linew,
00161 ipfint *info);
00162
00163 typedef void (*ma57id_t) (double *cntl, ipfint *icntl);
00164
00165 typedef void (*ma77_default_control_t)(struct ma77_control_d *control);
00166 typedef void (*ma77_open_nelt_t)(const int n, const char* fname1, const char* fname2,
00167 const char *fname3, const char *fname4, void **keep,
00168 const struct ma77_control_d *control, struct ma77_info_d *info,
00169 const int nelt);
00170 typedef void (*ma77_open_t)(const int n, const char* fname1, const char* fname2,
00171 const char *fname3, const char *fname4, void **keep,
00172 const struct ma77_control_d *control, struct ma77_info_d *info);
00173 typedef void (*ma77_input_vars_t)(const int idx, const int nvar, const int list[],
00174 void **keep, const struct ma77_control_d *control, struct ma77_info_d *info);
00175 typedef void (*ma77_input_reals_t)(const int idx, const int length,
00176 const double reals[], void **keep, const struct ma77_control_d *control,
00177 struct ma77_info_d *info);
00178 typedef void (*ma77_analyse_t)(const int order[], void **keep,
00179 const struct ma77_control_d *control, struct ma77_info_d *info);
00180 typedef void (*ma77_factor_t)(const int posdef, void **keep,
00181 const struct ma77_control_d *control, struct ma77_info_d *info,
00182 const double *scale);
00183 typedef void (*ma77_factor_solve_t)(const int posdef, void **keep,
00184 const struct ma77_control_d *control, struct ma77_info_d *info,
00185 const double *scale, const int nrhs, const int lx,
00186 double rhs[]);
00187 typedef void (*ma77_solve_t)(const int job, const int nrhs, const int lx, double x[],
00188 void **keep, const struct ma77_control_d *control, struct ma77_info_d *info,
00189 const double *scale);
00190 typedef void (*ma77_resid_t)(const int nrhs, const int lx, const double x[],
00191 const int lresid, double resid[], void **keep,
00192 const struct ma77_control_d *control, struct ma77_info_d *info,
00193 double *anorm_bnd);
00194 typedef void (*ma77_scale_t)(double scale[], void **keep,
00195 const struct ma77_control_d *control, struct ma77_info_d *info,
00196 double *anorm);
00197 typedef void (*ma77_enquire_posdef_t)(double d[], void **keep,
00198 const struct ma77_control_d *control, struct ma77_info_d *info);
00199 typedef void (*ma77_enquire_indef_t)(int piv_order[], double d[], void **keep,
00200 const struct ma77_control_d *control, struct ma77_info_d *info);
00201 typedef void (*ma77_alter_t)(const double d[], void **keep,
00202 const struct ma77_control_d *control, struct ma77_info_d *info);
00203 typedef void (*ma77_restart_t)(const char *restart_file, const char *fname1,
00204 const char *fname2, const char *fname3, const char *fname4, void **keep,
00205 const struct ma77_control_d *control, struct ma77_info_d *info);
00206 typedef void (*ma77_finalise_t)(void **keep, const struct ma77_control_d *control,
00207 struct ma77_info_d *info);
00208
00209 typedef void (*ma86_default_control_t)(struct ma86_control *control);
00210 typedef void (*ma86_analyse_t)(const int n, const int ptr[], const int row[],
00211 int order[], void **keep, const struct ma86_control *control,
00212 struct ma86_info *info);
00213 typedef void (*ma86_factor_t)(const int n, const int ptr[], const int row[],
00214 const ma86pkgtype_d_ val[], const int order[], void **keep,
00215 const struct ma86_control *control, struct ma86_info *info,
00216 const ma86pkgtype_d_ scale[]);
00217 typedef void (*ma86_factor_solve_t)(const int n, const int ptr[],
00218 const int row[], const ma86pkgtype_d_ val[], const int order[], void **keep,
00219 const struct ma86_control *control, struct ma86_info *info, const int nrhs,
00220 const int ldx, ma86pkgtype_d_ x[], const ma86pkgtype_d_ scale[]);
00221 typedef void (*ma86_solve_t)(const int job, const int nrhs, const int ldx,
00222 ma86pkgtype_d_ *x, const int order[], void **keep,
00223 const struct ma86_control *control, struct ma86_info *info,
00224 const ma86pkgtype_d_ scale[]);
00225 typedef void (*ma86_finalise_t)(void **keep,
00226 const struct ma86_control *control);
00227
00228 typedef void (*ma97_default_control_t)(struct ma97_control *control);
00229 typedef void (*ma97_analyse_t)(const int check, const int n, const int ptr[],
00230 const int row[], ma97pkgtype_d_ val[], void **akeep,
00231 const struct ma97_control *control, struct ma97_info *info, int order[]);
00232 typedef void (*ma97_factor_t)(const int matrix_type, const int ptr[],
00233 const int row[], const ma97pkgtype_d_ val[], void **akeep, void **fkeep,
00234 const struct ma97_control *control, struct ma97_info *info,
00235 const ma97pkgtype_d_ scale[]);
00236 typedef void (*ma97_factor_solve_t)(const int matrix_type, const int ptr[],
00237 const int row[], const ma97pkgtype_d_ val[], const int nrhs,
00238 ma97pkgtype_d_ x[], const int ldx, void **akeep, void **fkeep,
00239 const struct ma97_control *control, struct ma97_info *info,
00240 const ma97pkgtype_d_ scale[]);
00241 typedef void (*ma97_solve_t)(const int job, const int nrhs, ma97pkgtype_d_ *x,
00242 const int ldx, void **akeep, void **fkeep,
00243 const struct ma97_control *control, struct ma97_info *info);
00244 typedef void (*ma97_finalise_t)(void **akeep, void **fkeep);
00245 typedef void (*ma97_free_akeep_t)(void **akeep);
00246
00247 typedef void (*mc19ad_t)(ipfint *N, ipfint *NZ, double* A, ipfint *IRN, ipfint* ICN, float* R, float* C, float* W);
00248
00249 typedef void (*mc68_default_control_t)(struct mc68_control_i *control);
00250 typedef void (*mc68_order_t)(int ord, int n, const int ptr[],
00251 const int row[], int perm[], const struct mc68_control_i *control,
00252 struct mc68_info_i *info);
00253
00269 int LSL_loadHSL(const char* libname, char* msgbuf, int msglen);
00270
00274 int LSL_unloadHSL();
00275
00279 int LSL_isHSLLoaded();
00280
00284 int LSL_isMA27available();
00285
00289 int LSL_isMA28available();
00290
00294 int LSL_isMA57available();
00295
00299 int LSL_isMA77available();
00300
00304 int LSL_isMA86available();
00305
00309 int LSL_isMA97available();
00310
00314 int LSL_isMC19available();
00315
00319 int LSL_isMC68available();
00320
00322 char* LSL_HSLLibraryName();
00323
00325 void LSL_setMA27(ma27ad_t ma27ad, ma27bd_t ma27bd, ma27cd_t ma27cd, ma27id_t ma27id);
00326
00328 void LSL_setMA28(ma28ad_t ma28ad);
00329
00331 void LSL_setMA57(ma57ad_t ma57ad, ma57bd_t ma57bd, ma57cd_t ma57cd, ma57ed_t ma57ed, ma57id_t ma57id);
00332
00334 void LSL_setMA77(ma77_default_control_t ma77_default_control,
00335 ma77_open_nelt_t ma77_open_nelt,
00336 ma77_open_t ma77_open,
00337 ma77_input_vars_t ma77_input_vars,
00338 ma77_input_reals_t ma77_input_reals,
00339 ma77_analyse_t ma77_analyse,
00340 ma77_factor_t ma77_factor,
00341 ma77_factor_solve_t ma77_factor_solve,
00342 ma77_solve_t ma77_solve,
00343 ma77_resid_t ma77_resid,
00344 ma77_scale_t ma77_scale,
00345 ma77_enquire_posdef_t ma77_enquire_posdef,
00346 ma77_enquire_indef_t ma77_enquire_indef,
00347 ma77_alter_t ma77_alter,
00348 ma77_restart_t ma77_restart,
00349 ma77_finalise_t ma77_finalise);
00350
00352 void LSL_setMA86(ma86_default_control_t ma86_default_control,
00353 ma86_analyse_t ma86_analyse,
00354 ma86_factor_t ma86_factor,
00355 ma86_factor_solve_t ma86_factor_solve,
00356 ma86_solve_t ma86_solve,
00357 ma86_finalise_t ma86_finalise);
00358
00360 void LSL_setMA97(ma97_default_control_t ma97_default_control,
00361 ma97_analyse_t ma97_analyse,
00362 ma97_factor_t ma97_factor,
00363 ma97_factor_solve_t ma97_factor_solve,
00364 ma97_solve_t ma97_solve,
00365 ma97_finalise_t ma97_finalise,
00366 ma97_free_akeep_t ma97_free_akeep);
00367
00369 void LSL_setMC19(mc19ad_t mc19ad);
00370
00372 void LSL_setMC68(mc68_default_control_t mc68_default_control, mc68_order_t mc68_order);
00373
00374 #ifdef __cplusplus
00375 }
00376 #endif
00377
00378 #endif