/*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C _| _| _|_|_| _|_|_| _|_| _|_|_| _|_| C _|_| _|_| _| _| _| _| _| _| _| _| C _| _| _| _| _| _| _|_|_|_| _| _| _| C _| _| _| _| _| _| _| _| _| _| C _| _| _|_|_| _|_|_| _| _| _|_|_| _|_| C C Version 6.0 (limited) C C MIDACO - Mixed Integer Distributed Ant Colony Optimization C ---------------------------------------------------------- C C MIDACO is a general solver for single- and multi-objective C Mixed Integer Non-Linear Programs (MINLP's) of the form: C C C Minimize F_1(X),... F_O(X) where X(1,...N-NI) is CONTINUOUS C and X(N-NI+1,...N) is DISCRETE C C subject to G_j(X) = 0 (j=1,...ME) equality constraints C G_j(X) >= 0 (j=ME+1,...M) inequality constraints C C and bounds XL <= X <= XU C C C MIDACO is a (heuristic) global optimization solver that approximates C a solution 'X' to the above displayed optimization problem. MIDACO C is based on an extended Ant Colony Optimization framework (see [1]) in C combination with the Oracle Penalty Method (see [2]) for constraints 'G(X)' C and a backtracking line search algorithm for local refinements. C C MIDACO is a derivative free black box solver and can handle any kind C of non-smooth and highly nonlinear functions. MIDACO can also handle C functions with moderate stochastic noise. For integer and mixed-integer C problems, MIDACO evaluates integer variables only at true integer points. C Thus, MIDACO does not perform a relaxation or other surrogate technique. C C MIDACO does not require any user specified parameter tuning as it can C run completely on 'Autopilot' (all parameter set equal to zero). C Optionally, the user can adjust the MIDACO performance by setting C some parameters explained below. C C In case of mixed integer problems, the continuous variables are stored C first in 'X(1,...N-NI)', while the discrete (also called integer or C combinatorial) variables are stored last in 'X(N-NI+1,...N)'. C As an example consider: C C X = ( 0.1234, 5.6789, 1.0000, 2.0000, 3.0000) C C where 'N' = 5 and 'NI' = 3 C C Note that all 'X' is of type double precision. Equality and inequality C constraints are handled in a similar way. The vector 'G' stores at first C the 'ME' equality constraints and behind those, the remaining 'M-ME' C inequality constraints are stored. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C List of MIDACO subroutine arguments C ----------------------------------- C C P : Parallelization Factor. If no parallelization is desired, set P = 1. C C O : Number of objective functions. C C N : Number of optimization variables in total (continuous and integer ones). C 'N' is the dimension of the iterate 'X' with X = (X_1,...,X_N). C C NI : Number of integer optimization variables. 'NI' <= 'N'. C Integer (discrete) variables must be stored at the end of 'X'. C C M : Number of constraints in total (equality and inequality ones). C 'M' is the dimension of a constraint vector 'G' with G = (G_1,...,G_M). C C ME : Number of equality constraints. 'ME' <= 'M'. C Equality constraints are stored in the beginning of 'G'. C Inequality constraints are stored in the end of 'G'. c C X(P*N) : Array containing the iterate 'X'. For P=1 (no parallelization) C 'X' stores only one iterate and has length 'N'. For P>1 C 'X' contains several iterates, which are stored one after C another. C C F(P*O) : Array containing the objective function values 'F' corresponding C to the iterates 'X'. For P=1 (no parallelization), 'F' is has lenth 'O'. C For P>1 F has length 'P*O' and stores the vectors of objectives C corresponding to 'X' one after another. C C G(P*M) : Array containing the constraint values 'G'.For P=1 (no parallelization) C 'G' has length 'M'. For P>1 'G' has length 'P*M' and stores the vectors C of constraints corresponding to 'X' one after another. C C XL(N) : Array containing the lower bounds for the iterates 'X'. C Note that for integer dimensions (i > N-NI) the bounds should also be C discrete, e.g. X(i) = 1.0000. C C XU(N) : Array containing the upper bounds for the iterates 'X'. C Note that for integer dimensions (i > N-NI) the bounds should also be C discrete, e.g. X(i) = 1.0000. C C IFLAG : Information flag used by MIDACO. Initially MIDACO must be called with IFLAG=0. C If MIDACO works correctly, IFLAG values lower than 0 are used for internal C communication. If MIDACO stops (either by submitting ISTOP=1 or automatically C by the FSTOP or ALGOSTOP parameter), an IFLAG value between 1 and 9 is returned C as final message. If MIDACO detects at start-up some critical problem setup, a C ***WARNING*** message is returned by IFLAG as value between 10 and 99. If C MIDACO detects an ***MIDACO INPUT ERROR***, an IFLAG value between 100 and 999 C is returned and MIDACO stops. The individual IFLAG flags are listed below. C C ISTOP : Communication flag to stop MIDACO. If MIDACO is called with C ISTOP = 1, MIDACO returns the best found solution in 'X' with C corresponding 'F' and 'G'. C C PARAM() : Array containing 13 parameters that can be selected by the user to adjust MIDACO. C (See the user manual for a more detailed description of individual parameters) C C RW(LRW) : Real workarray (Type: double precision) of length 'LRW' C LRW : Length of 'RW'. 'LRW' must be greater or equal to: C C 120*N+20*M+20*O+20*P+P*(M+2*O)+O*O+5000 C C IW(LIW) : Integer workarray (Type: long integer) of length 'LIW' C LIW : Length of 'IW'. 'LIW' must be greater or equal to: C C 3*N+P+1000 C C PF(LPF) : Real array, containing the approximation of the pareto front. C LPF : Length of 'PF'. 'LPF' must be greater or equal to: C C (O+M+N)*PARETOMAX + 1 C C where PARETOMAX = 1000 by default. In case PARAM(10) is not equal zero, C PARETOMAX equals the absolute value of PARAM(10). C C KEY : License-Key for MIDACO. Note that any licensed copy of MIDACO comes with an C individual 'KEY' determining the license owner and its affiliation. C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C List of IFLAG messages C ---------------------- C C Final Messages: C --------------- C IFLAG = 1 : Feasible solution, MIDACO was stopped by MAXEVAL or MAXTIME C IFLAG = 2 : Infeasible solution, MIDACO was stopped by MAXEVAL or MAXTIME C IFLAG = 3 : Feasible solution, MIDACO stopped automatically by ALGOSTOP C IFLAG = 4 : Infeasible solution, MIDACO stopped automatically by ALGOSTOP C IFLAG = 5 : Feasible solution, MIDACO stopped automatically by EVALSTOP C IFLAG = 6 : Infeasible solution, MIDACO stopped automatically by EVALSTOP C IFLAG = 7 : Feasible solution, MIDACO stopped automatically by FSTOP C C WARNING - Flags: C ---------------- C IFLAG = 51 : Some X(i) is greater/lower than +/- 1.0D+16 (try to avoid huge values) C IFLAG = 52 : Some XL(i) is greater/lower than +/- 1.0D+16 (try to avoid huge values) C IFLAG = 53 : Some XU(i) is greater/lower than +/- 1.0D+16 (try to avoid huge values) C IFLAG = 71 : Some XL(i) = XU(i) (fixed variable) C IFLAG = 81 : F(1) has value NaN for starting point X C IFLAG = 82 : Some G(X) has value NaN for starting point X C IFLAG = 91 : FSTOP is greater/lower than +/- 1.0D+16 C IFLAG = 92 : ORACLE is greater/lower than +/- 1.0D+16 C C ERROR - Flags: C -------------- C IFLAG = 100 : P <= 0 or P > 1.0D+99 C IFLAG = 101 : O <= 0 or O > 1000000000 C IFLAG = 102 : N <= 0 or N > 1.0D+99 C IFLAG = 103 : NI < 0 C IFLAG = 104 : NI > N C IFLAG = 105 : M < 0 or M > 1.0D+99 C IFLAG = 106 : ME < 0 C IFLAG = 107 : ME > M C IFLAG = 201 : some X(i) has type NaN C IFLAG = 202 : some XL(i) has type NaN C IFLAG = 203 : some XU(i) has type NaN C IFLAG = 204 : some X(i) < XL(i) C IFLAG = 205 : some X(i) > XU(i) C IFLAG = 206 : some XL(i) > XU(i) C IFLAG = 301 : PARAM(1) < 0 or PARAM(1) > 1.0D+99 C IFLAG = 302 : PARAM(2) < 0 or PARAM(2) > 1.0D+99 C IFLAG = 303 : PARAM(3) greater/lower than +/- 1.0D+99 C IFLAG = 304 : PARAM(4) < 0 or PARAM(4) > 1.0D+99 C IFLAG = 305 : PARAM(5) greater/lower than +/- 1.0D+99 C IFLAG = 306 : PARAM(6) not a discrete value or PARAM(6) > 1.0D+99 C IFLAG = 307 : PARAM(7) < 0 or PARAM(7) > 1.0D+99 C IFLAG = 308 : PARAM(8) < 0 or PARAM(8) > 100 C IFLAG = 309 : PARAM(7) < PARAM(8) C IFLAG = 310 : PARAM(7) > 0 but PARAM(8) = 0 C IFLAG = 311 : PARAM(8) > 0 but PARAM(7) = 0 C IFLAG = 312 : PARAM(9) greater/lower than +/- 1.0D+99 C IFLAG = 321 : PARAM(10) >= 1.0D+99 C IFLAG = 322 : PARAM(10) not a discrete value C IFLAG = 331 : PARAM(11) < 0 or > 0.5 C IFLAG = 344 : LPF too small. LPF must be at least (O+M+N)*PARETOMAX + 1, C where PARETOMAX = 1000 by default. See also PARAM(10). C IFLAG = 347 : PARAM(5) > 0 but PARAM(5) < 1 C IFLAG = 348 : PARAM(5): Optional EVALSTOP precision appendix > 0.5 C IFLAG = 350 : PARAM(12) > 1 or < 1 but not a discrete value C IFLAG = 351 : PARAM(13) < 0 or PARAM(13) > 3 C IFLAG = 352 : PARAM(13) not a discrete value C IFLAG = 399 : Some PARAM(i) has type NaN C IFLAG = 401 : ISTOP < 0 or ISTOP > 1 C IFLAG = 402 : Starting point does not satisfy all-different constraint C IFLAG = 501 : Double precision work space size LRW is too small. C Increase size of RW array. RW must be at least of C size LRW = 120*N+20*M+20*O+20*P+P*(M+2*O)+O*O+5000 C C IFLAG = 502 : Internal LRW check error C IFLAG = 601 : Integer work space size LIW is too small. C Increase size of IW array. IW must be at least of C size LIW = 3*N+P+1000 C C IFLAG = 602 : Internal LIW check error C IFLAG = 701 : Input check failed. MIDACO must be called initially with IFLAG = 0 C IFLAG = 801 : P > PMAX (user must increase PMAX in the MIDACO source code) C IFLAG = 881 : Integer part of X contains continues (non discrete) values C IFLAG = 882 : Integer part of XL contains continues (non discrete) values C IFLAG = 883 : Integer part of XU contains continues (non discrete) values C IFLAG = 900 : Invalid or corrupted LICENSE-KEY C IFLAG = 999 : N > 4. The free test version is limited up to 4 variables. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C References: C ----------- C C [1] Schlueter, M., Egea, J. A., Banga, J. R.: C "Extended ant colony optimization for non-convex mixed integer nonlinear programming", C Computers and Operations Research (Elsevier), Vol. 36 , Issue 7, Page 2217-2229, 2009. C C [2] Schlueter M., Gerdts M.: "The oracle penalty method", C Journal of Global Optimization (Springer), Vol. 47, Issue 2, Page 293-325, 2010. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C Author (C) : Dr. Martin Schlueter C Information Initiative Center, C Division of Large Scale Computing Systems, C Hokkaido University, JAPAN. C C Email : info@midaco-solver.com C URL : http://www.midaco-solver.com C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ #ifndef F2C_INCLUDE #define F2C_INCLUDE typedef long int integer; typedef char *address; typedef short int shortint; typedef float real; typedef double doublereal; typedef struct { real r, i; } complex; typedef struct { doublereal r, i; } doublecomplex; typedef long int logical; typedef short int shortlogical; typedef char logical1; typedef char integer1; #define TRUE_ (1) #define FALSE_ (0) #ifndef Extern #define Extern extern #endif #ifdef f2c_i2 typedef short flag; typedef short ftnlen; typedef short ftnint; #else typedef long flag; typedef long ftnlen; typedef long ftnint; #endif typedef struct { flag cierr; ftnint ciunit; flag ciend; char *cifmt; ftnint cirec; } cilist; typedef struct { flag icierr; char *iciunit; flag iciend; char *icifmt; ftnint icirlen; ftnint icirnum; } icilist; typedef struct { flag oerr; ftnint ounit; char *ofnm; ftnlen ofnmlen; char *osta; char *oacc; char *ofm; ftnint orl; char *oblnk; } olist; typedef struct { flag cerr; ftnint cunit; char *csta; } cllist; typedef struct { flag aerr; ftnint aunit; } alist; typedef struct { flag inerr; ftnint inunit; char *infile; ftnlen infilen; ftnint *inex; ftnint *inopen; ftnint *innum; ftnint *innamed; char *inname; ftnlen innamlen; char *inacc; ftnlen inacclen; char *inseq; ftnlen inseqlen; char *indir; ftnlen indirlen; char *infmt; ftnlen infmtlen; char *inform; ftnint informlen; char *inunf; ftnlen inunflen; ftnint *inrecl; ftnint *innrec; char *inblank; ftnlen inblanklen; } inlist; #define VOID void union Multitype { shortint h; integer i; real r; doublereal d; complex c; doublecomplex z; }; typedef union Multitype Multitype; typedef long Long; struct Vardesc { char *name; char *addr; ftnlen *dims; int type; }; typedef struct Vardesc Vardesc; struct Namelist { char *name; Vardesc **vars; int nvars; }; typedef struct Namelist Namelist; #define abs(x) ((x) >= 0 ? (x) : -(x)) #define dabs(x) (doublereal)abs(x) #define min(a,b) ((a) <= (b) ? (a) : (b)) #define max(a,b) ((a) >= (b) ? (a) : (b)) #define dmin(a,b) (doublereal)min(a,b) #define dmax(a,b) (doublereal)max(a,b) #define F2C_proc_par_types 1 #ifdef __cplusplus typedef int /* Unknown procedure type */ (*U_fp)(...); typedef shortint (*J_fp)(...); typedef integer (*I_fp)(...); typedef real (*R_fp)(...); typedef doublereal (*D_fp)(...), (*E_fp)(...); typedef /* Complex */ VOID (*C_fp)(...); typedef /* Double Complex */ VOID (*Z_fp)(...); typedef logical (*L_fp)(...); typedef shortlogical (*K_fp)(...); typedef /* Character */ VOID (*H_fp)(...); typedef /* Subroutine */ int (*S_fp)(...); #else typedef int /* Unknown procedure type */ (*U_fp)(); typedef shortint (*J_fp)(); typedef integer (*I_fp)(); typedef real (*R_fp)(); typedef doublereal (*D_fp)(), (*E_fp)(); typedef /* Complex */ VOID (*C_fp)(); typedef /* Double Complex */ VOID (*Z_fp)(); typedef logical (*L_fp)(); typedef shortlogical (*K_fp)(); typedef /* Character */ VOID (*H_fp)(); typedef /* Subroutine */ int (*S_fp)(); #endif typedef VOID C_f; /* complex function */ typedef VOID H_f; /* character function */ typedef VOID Z_f; /* double complex function */ typedef doublereal E_f; #ifndef Skip_f2c_Undefs #undef cray #undef gcos #undef mc68010 #undef mc68020 #undef mips #undef pdp11 #undef sgi #undef sparc #undef sun #undef sun2 #undef sun3 #undef sun4 #undef u370 #undef u3b #undef u3b2 #undef u3b5 #undef unix #undef vax #endif #endif #ifdef _WIN32 #define huge huged #define near neard #endif static doublereal c_b14 = 0.; static doublereal c_b16 = 3.; static doublereal c_b27 = 10.; static doublereal c_b45 = .5; static doublereal c_b70 = 1e16; static integer c__0 = 0; static integer c__1 = 1; static doublereal c_b141 = .1; /* Subroutine */ int midaco(integer *p, integer *o, integer *n, integer *ni, integer *m, integer *me, doublereal *x, doublereal *f, doublereal *g, doublereal *xl, doublereal *xu, integer *iflag, integer *istop, doublereal *param, doublereal *rw, integer *lrw, integer *iw, integer *liw, doublereal *pf, integer *lpf, char *key) { /* Initialized data */ static integer ea = 0; static integer eb = 0; static integer edg = 0; static integer edf = 0; static integer eu = 0; static integer en = 0; static integer eie = 0; static integer em = 0; static integer efm = 0; extern /* Subroutine */ int precheck_(integer *, integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, integer *, integer *), midaco_kernel_driver__( integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, doublereal *, doublereal *, integer *, integer *, integer *, doublereal *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, char *, ftnlen); static integer offset; /* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC */ /* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC */ /* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC */ /* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC */ /* Parameter adjustments */ --f; --xu; --xl; --x; --g; --param; --rw; --iw; --pf; /* Function Body */ /* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC */ /* Check number of variables for the limited version. Note that */ /* removing this check will cause MIDACO to not work properly on */ /* problems with N > 4. */ /* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC */ if (*n > 4) { *iflag = 999; *istop = 1; return 0; } /* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC */ if (*iflag == 0) { precheck_(p, o, n, m, lrw, liw, lpf, &pf[1], ¶m[1], iflag, istop); offset = *p + *o + *o + *n + *m + 200; /* Setting up RW workspace entry pointers */ ea = offset + *n * 107 + *m * 6 + *o * 7 + *p * 5 + 616; eb = offset + ea + *p; edg = offset + eb + *p; edf = offset + edg + *p * (*m + (*o << 1)) + 1; eu = offset + edf + *p; en = offset + eu + *o; eie = offset + en + *o; em = offset + eie + *p; efm = offset + em + *p; } /* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC */ midaco_kernel_driver__(p, o, n, ni, m, me, &f[1], &g[1], &x[1], &xl[1], & xu[1], iflag, istop, ¶m[1], &rw[1], lrw, &iw[1], liw, &pf[1], lpf, &ea, &eb, &edg, &edf, &eu, &en, &eie, &em, &efm, key, ( ftnlen)60); /* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC */ return 0; } /* midaco_ */ /* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC */ /* Subroutine */ int i409_(integer *m, integer *i8, doublereal *g, doublereal *i5, doublereal *i2, doublereal *i4, integer *i6, integer *i43) { /* System generated locals */ integer i__1, i__2, i__3; /* Local variables */ static integer i__, j, k, t; static doublereal z__; static integer i10; extern doublereal o25_(doublereal *); static integer ok; extern integer i301_(doublereal *, doublereal *); static integer i450; /* Parameter adjustments */ --i6; --i4; --i2; --i5; --g; /* Function Body */ i__1 = *m; for (k = 1; k <= i__1; ++k) { i6[*i43 + k - 1] = k; } i__1 = *m; for (k = 1; k <= i__1; ++k) { j = (integer) ((doublereal) k * o25_(&i4[1])) + 1; i6[*i43 + k - 1] = i6[*i43 + j - 1]; i6[*i43 + j - 1] = k; } i__1 = *m; for (t = 1; t <= i__1; ++t) { i__ = i6[*i43 + t - 1]; if (i__ <= *m - *i8) { goto L79; } i__2 = *m; for (k = *m - *i8 + 1; k <= i__2; ++k) { if (i301_(&g[i__], &g[k]) == 1 && i__ != k) { i450 = 0; i10 = 0; while(i450 == 0) { ++i10; z__ = g[i__] + (doublereal) i10; if (z__ > i2[i__]) { goto L88; } ok = 0; i__3 = *m; for (j = *m - *i8 + 1; j <= i__3; ++j) { if (i__ != j && i301_(&z__, &g[j]) == 0) { ++ok; } } if (ok == *i8 - 1) { i450 = 1; g[i__] = z__; goto L123; } L88: z__ = g[i__] - (doublereal) i10; if (z__ < i5[i__]) { goto L99; } ok = 0; i__3 = *m; for (j = *m - *i8 + 1; j <= i__3; ++j) { if (i__ != j && i301_(&z__, &g[j]) == 0) { ++ok; } } if (ok == *i8 - 1) { i450 = 1; g[i__] = z__; goto L123; } L99: if ((doublereal) i10 > i2[i__] - i5[i__]) { goto L123; } } L123: ; } } L79: ; } return 0; } /* i409_ */ /* Subroutine */ int i405_(doublereal *l, doublereal *x, integer *n, integer * i0, doublereal *i16, doublereal *i48, integer *i41, integer *i42) { /* Initialized data */ static integer k2 = 0; static doublereal i56 = 0.; static doublereal i75 = 0.; static doublereal k1 = 0.; static doublereal i17 = 0.; /* Builtin functions */ integer i_dnnt(doublereal *); /* Local variables */ extern integer i301_(doublereal *, doublereal *); extern /* Subroutine */ int i403_(doublereal *, integer *, integer *, doublereal *, doublereal *); /* Parameter adjustments */ --i48; --x; /* Function Body */ if (*i42 == 0) { k2 = 0; i403_(&x[1], n, i0, i16, &i17); i56 = *l; i75 = i17; k1 = .001; if (i48[5] - (doublereal) i_dnnt(&i48[5]) > 0.) { k1 = i48[5] - (doublereal) i_dnnt(&i48[5]); } goto L9; } if (*n <= 0) { if (*l <= i56 - abs(i56) * k1) { goto L7; } } else { i403_(&x[1], n, i0, i16, &i17); if (i75 <= *i16) { if (i301_(&i17, &i75) == 1 && *l <= i56 - abs(i56) * k1) { goto L7; } } else { if (i17 <= i75 - i75 * k1) { goto L7; } } } ++k2; if (k2 >= i_dnnt(&i48[5])) { goto L8; } goto L9; L7: i56 = *l; i75 = i17; k2 = 0; goto L9; L8: *i41 = 1; if (i75 <= *i16) { *i42 = 5; } if (i75 > *i16) { *i42 = 6; } L9: return 0; } /* i405_ */ /* Subroutine */ int i403_(doublereal *x, integer *n, integer *i0, doublereal *i16, doublereal *i17) { /* System generated locals */ integer i__1; doublereal d__1, d__2; /* Local variables */ static integer i__; /* Parameter adjustments */ --x; /* Function Body */ *i17 = 0.; i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { if (i__ <= *i0) { if ((d__1 = x[i__], abs(d__1)) > *i16) { *i17 += (d__2 = x[i__], abs(d__2)); } } else { if (x[i__] < -(*i16)) { *i17 -= x[i__]; } } } return 0; } /* i403_ */ /* Subroutine */ int o19_(integer *f, integer *o, integer *m, integer *i8, integer *n, integer *i0, doublereal *g, doublereal *l, doublereal *x, doublereal *i5, doublereal *i2, integer *i42, integer *i41, doublereal *i48, doublereal *i4, integer *i32, integer *i6, integer * i99, integer *i30, integer *i52, integer *i50, integer *i100, char * i990, ftnlen i990_len) { /* System generated locals */ integer i__1, i__2; doublereal d__1; /* Builtin functions */ integer i_dnnt(doublereal *); double d_nint(doublereal *); /* Local variables */ static integer i__, k; extern /* Subroutine */ int o18_(integer *, char *, ftnlen); extern integer i301_(doublereal *, doublereal *); static integer i302, i303; extern integer i304_(doublereal *); static integer i436, egtraollset; /* Parameter adjustments */ --l; --i2; --i5; --g; --x; --i48; --i4; --i6; /* Function Body */ if (*i42 >= 100) { return 0; } *i30 = 100; if (*f <= 0 || (doublereal) (*f) > 1e99) { *i42 = 100; goto L701; } if (*m <= 0 || (doublereal) (*m) > 1e99) { *i42 = 102; goto L701; } if (*i8 < 0) { *i42 = 103; goto L701; } if (*i8 > *m) { *i42 = 104; goto L701; } if (*n < 0 || (doublereal) (*n) > 1e99) { *i42 = 105; goto L701; } if (*i0 < 0) { *i42 = 106; goto L701; } if (*i0 > *n) { *i42 = 107; goto L701; } i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { if (i304_(&g[i__]) == 1) { *i42 = 201; goto L701; } if (i304_(&i5[i__]) == 1) { *i42 = 202; goto L701; } if (i304_(&i2[i__]) == 1) { *i42 = 203; goto L701; } if (g[i__] < i5[i__] - 1e-4) { *i42 = 204; goto L701; } if (g[i__] > i2[i__] + 1e-4) { *i42 = 205; goto L701; } if (i5[i__] > i2[i__] + 1e-4) { *i42 = 206; goto L701; } } if (i48[1] < 0. || i48[1] > 1e99) { *i42 = 301; goto L701; } if (i48[2] < 0. || i48[2] > 1e99) { *i42 = 302; goto L701; } if (i48[3] > 1e99 || i48[3] < -1e99) { *i42 = 303; goto L701; } if (i48[4] < 0. || i48[4] > 1e99) { *i42 = 304; goto L701; } if (i48[5] < 0. || i48[5] > 1e99) { *i42 = 305; goto L701; } if (i48[6] > 1e99 || (d__1 = i48[6] - (doublereal) i_dnnt(&i48[6]), abs( d__1)) > 1e-6) { *i42 = 306; goto L701; } if (i48[7] < 0. || i48[7] > 1e99) { *i42 = 307; goto L701; } if (i48[8] < 0. || i48[8] > (doublereal) (*i30)) { *i42 = 308; goto L701; } if (i48[7] > 0. && i48[7] < i48[8]) { *i42 = 309; goto L701; } if (i48[7] > 0. && i301_(&i48[8], &c_b14) == 1) { *i42 = 310; goto L701; } if (i301_(&i48[7], &c_b14) == 1 && i48[8] > 0.) { *i42 = 311; goto L701; } if (i48[9] > 1e99 || i48[9] < -1e99) { *i42 = 312; goto L701; } if (abs(i48[12]) > 0.) { if ((d__1 = i48[12] - (doublereal) i_dnnt(&i48[12]), abs(d__1)) > 1e-6 && abs(i48[12]) > 1.) { *i42 = 350; goto L701; } } if (i48[13] < 0. || i48[13] > 3.) { *i42 = 351; goto L701; } if ((d__1 = i48[13] - (doublereal) i_dnnt(&i48[13]), abs(d__1)) > 1e-6) { *i42 = 352; goto L701; } for (i__ = 1; i__ <= 12; ++i__) { if (i304_(&i48[i__]) == 1) { *i42 = 399; goto L701; } } if (i48[5] > 0. && i48[5] < 1.) { *i42 = 347; goto L701; } if (i48[5] - d_nint(&i48[5]) < 0.) { *i42 = 348; goto L701; } if (*i41 < 0 || *i41 > 1) { *i42 = 401; goto L701; } if (i301_(&i48[13], &c_b16) == 1) { i__1 = *m; for (i__ = *m - *i8 + 1; i__ <= i__1; ++i__) { i__2 = *m; for (k = *m - *i8 + 1; k <= i__2; ++k) { if (i__ != k && (d__1 = g[i__] - g[k], abs(d__1)) <= .1f) { *i42 = 402; goto L701; } } } } if (*o <= 1) { i436 = *n; } else { i436 = *n - (*o << 1); } egtraollset = (*f + *o + *m + i436) * 5 + 100; *i52 = (*m << 1) + (i436 + (*o << 1)) + (*m + 5) * *i30 + 16 + egtraollset; *i50 = *f + 31 + *m + *m; i302 = *n * *f + (*n << 1) + *m * 104 + *o * *o + (*o << 1) * *f + *o * 6 + *f * 3 + 522 + (*f << 1); i303 = *m * 3 + *f + 92; if (*i32 < i302) { *i42 = 502; goto L701; } if (*i99 < i303) { *i42 = 602; goto L701; } i__1 = *i52 + (*m << 1) + *n + 3; for (i__ = 10; i__ <= i__1; ++i__) { i4[i__] = 0.; } i__1 = i303; for (i__ = 1; i__ <= i__1; ++i__) { i6[i__] = 0; } i__1 = *m; for (i__ = *m - *i8 + 1; i__ <= i__1; ++i__) { if ((d__1 = g[i__] - d_nint(&g[i__]), abs(d__1)) > .001) { *i42 = 881; goto L701; } if ((d__1 = i5[i__] - d_nint(&i5[i__]), abs(d__1)) > .001) { *i42 = 882; goto L701; } if ((d__1 = i2[i__] - d_nint(&i2[i__]), abs(d__1)) > .001) { *i42 = 883; goto L701; } } o18_(&i6[*i50 + 1], i990, (ftnlen)60); i6[*i50 + 61] = 0; for (i__ = 1; i__ <= 60; ++i__) { i6[*i50 + 61] += i6[*i50 + i__]; } if (i6[*i50 + 61] != 2736) { *i42 = 900; goto L701; } for (i__ = 4; i__ <= 7; ++i__) { i4[i__] = (doublereal) i6[*i50 + i__ - 3]; } i4[8] = (doublereal) i6[*i50 + 61]; *i100 = 0; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { if (g[i__] > 1e16 || g[i__] < -1e16) { *i42 = 51; goto L702; } if (i5[i__] > 1e16 || i5[i__] < -1e16) { *i42 = 52; goto L702; } if (i2[i__] > 1e16 || i2[i__] < -1e16) { *i42 = 53; goto L702; } if (i301_(&i5[i__], &i2[i__]) == 1) { *i42 = 71; goto L702; } } if (i304_(&l[1]) == 1) { *i42 = 81; goto L702; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { if (i304_(&x[i__]) == 1) { *i42 = 82; goto L702; } } if (abs(i48[3]) > 1e16) { *i42 = 91; goto L702; } if (abs(i48[9]) > 1e16) { *i42 = 92; goto L702; } return 0; L701: *i41 = 1; return 0; L702: *i100 = 1; return 0; } /* o19_ */ /* Subroutine */ int i410_(integer *o, integer *m, integer *n, doublereal *l, doublereal *x, doublereal *g, doublereal *pl, doublereal *px, doublereal *pg, integer *i449, integer *i452, doublereal *k6, integer *i448, doublereal *i306, doublereal *i307, doublereal *g004, integer * g005, integer *fx13, integer *io10, doublereal *io16, integer *io2) { /* Initialized data */ static integer i453 = 0; static integer ii = 0; static integer k5 = 0; static doublereal i411 = 0.; /* System generated locals */ integer i__1, i__2, i__3; doublereal d__1, d__2; /* Local variables */ static integer i__, j, k; static doublereal y, z__, k2, k4; extern /* Subroutine */ int o9_(doublereal *, doublereal *, doublereal *, integer *, integer *, integer *, doublereal *); static integer i440, i441, i437, i438; static doublereal i439; extern doublereal i305_(void); static doublereal fx11; static integer fx03; static doublereal fx14; static integer fx05, fx06; static doublereal fx12, fx21[1000], fx22, fx01; static integer fx08[1000], fx04; static doublereal fx02; extern /* Subroutine */ int ol004_(integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, integer *, integer *); extern doublereal rio5_(doublereal *, doublereal *); static doublereal k6_i438__; /* Parameter adjustments */ --fx13; --i307; --i306; --pg; --px; --pl; --g; --x; --l; /* Function Body */ *io2 = 0; if (*i449 == 0) { i453 = 0; ii = 0; k5 = 0; i411 = 0.; goto L888; } if (*i449 >= 2) { i__1 = *i449; for (i__ = 1; i__ <= i__1; ++i__) { fx02 = 0.; i__2 = *o; for (j = 1; j <= i__2; ++j) { z__ = pl[*o * (i__ - 1) + j]; fx02 += (d__1 = l[j] - z__, abs(d__1)); } if (fx02 <= 1e-6) { return 0; } } } fx14 = *k6 - *k6 / (doublereal) (*g005); k6_i438__ = 1e-12; i438 = 0; fx04 = 0; i__1 = *o; for (j = 1; j <= i__1; ++j) { /* Computing MAX */ d__1 = 1e-8, d__2 = i307[j] - i306[j]; fx21[j - 1] = max(d__1,d__2); fx04 += fx13[j]; } i__1 = *i449; for (i__ = 1; i__ <= i__1; ++i__) { i437 = 0; fx05 = 0; fx03 = 1; i__2 = *o; for (j = 1; j <= i__2; ++j) { if (fx13[j] == 1) { goto L123; } z__ = pl[*o * (i__ - 1) + j]; if (l[j] <= z__) { if (l[j] <= z__ - fx21[j - 1] * fx14) { ++i437; } if (l[j] < z__ - fx21[j - 1] * .01) { fx05 = 1; } } else { if (l[j] > z__ + fx21[j - 1] * .001) { fx03 = 0; } } L123: ; } if (i437 < *o - fx04 && fx03 == 1 && fx05 == 1) { pl[*o * (i__ - 1) + 1] = -30111979.; ++i438; } if (i437 == 0 && i438 == 0) { return 0; } if (i437 == *o - fx04) { pl[*o * (i__ - 1) + 1] = -30111979.; ++i438; } } if (*i449 <= 10) { goto L777; } if (i438 >= 1) { goto L777; } fx06 = 0; i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { if (l[i__] > i307[i__]) { fx06 = 1; } } if (fx06 >= 1) { fx22 = 0.; k2 = 0.; i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { if (l[i__] > i307[i__]) { k2 += (d__1 = l[i__] - i307[i__], abs(d__1)) / fx21[i__ - 1]; } if (l[i__] < i306[i__]) { fx22 += (d__1 = l[i__] - i306[i__], abs(d__1)) / fx21[i__ - 1] ; } } if (k2 > fx22 * 100.) { if (*o <= 2) { *io2 = 0; return 0; } else { if (k2 > .01) { *io2 = 0; return 0; } } } } L777: if (i438 == 0) { goto L888; } i__1 = *i449 - i438; for (i__ = 1; i__ <= i__1; ++i__) { if ((d__1 = pl[*o * (i__ - 1) + 1] + 30111979., abs(d__1)) <= k6_i438__) { i__2 = *i449; for (j = *i449 - i438 + 1; j <= i__2; ++j) { if ((d__1 = pl[*o * (j - 1) + 1] + 30111979., abs(d__1)) > k6_i438__) { i__3 = *o; for (k = 1; k <= i__3; ++k) { pl[*o * (i__ - 1) + k] = pl[*o * (j - 1) + k]; } i__3 = *n; for (k = 1; k <= i__3; ++k) { px[*n * (i__ - 1) + k] = px[*n * (j - 1) + k]; } i__3 = *m; for (k = 1; k <= i__3; ++k) { pg[*m * (i__ - 1) + k] = pg[*m * (j - 1) + k]; } pl[*o * (j - 1) + 1] = -30111979.; goto L1; } } } L1: ; } *i449 -= i438; L888: *io2 = 1; if (*i449 == *i452 && *i448 == 1) { goto L999; } if (*i449 == *i452) { k4 = i305_(); i__1 = *i449; for (i__ = 1; i__ <= i__1; ++i__) { i439 = 0.; i__2 = *o; for (j = 1; j <= i__2; ++j) { z__ = pl[*o * (i__ - 1) + j]; i439 += (d__1 = l[j] - z__, abs(d__1)); } if (i439 < k4) { k4 = i439; } } if (i453 == 1 && i411 > k4) { goto L999; } i440 = 1; i441 = 1; if (i453 == 2 && i411 > k4) { i440 = ii; i441 = k5; } i411 = i305_(); i__1 = *i449; for (i__ = i440; i__ <= i__1; ++i__) { i__2 = *i449; for (k = i441; k <= i__2; ++k) { if (i__ != k) { i439 = 0.; i__3 = *o; for (j = 1; j <= i__3; ++j) { z__ = pl[*o * (i__ - 1) + j]; y = pl[*o * (k - 1) + j]; i439 += (d__1 = y - z__, abs(d__1)); } if (i439 < k4) { i__3 = *o; for (j = 1; j <= i__3; ++j) { pl[*o * (i__ - 1) + j] = l[j]; } i__3 = *n; for (j = 1; j <= i__3; ++j) { px[*n * (i__ - 1) + j] = x[j]; } i__3 = *m; for (j = 1; j <= i__3; ++j) { pg[*m * (i__ - 1) + j] = g[j]; } i453 = 2; ii = i__ - 1; k5 = k - 1; if (ii <= 0) { ii = 1; } if (k5 <= 0) { k5 = 1; } goto L999; } if (i439 < i411) { i411 = i439; } } } } i453 = 1; goto L999; } ++(*i449); i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { pl[*o * (*i449 - 1) + i__] = l[i__]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { px[*n * (*i449 - 1) + i__] = x[i__]; } i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { pg[*m * (*i449 - 1) + i__] = g[i__]; } L999: i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { fx12 = i306[i__]; fx11 = i307[i__]; i306[i__] = i305_(); i307[i__] = -i305_(); i__2 = *i449; for (k = 1; k <= i__2; ++k) { z__ = pl[*o * (k - 1) + i__]; if (z__ < i306[i__]) { i306[i__] = z__; } if (z__ > i307[i__]) { i307[i__] = z__; fx08[i__ - 1] = k; } } if (rio5_(&fx12, &i306[i__]) > 1e-16) { o9_(g004, &i306[i__], &fx12, o, g005, io10, io16); } if (rio5_(&fx11, &i307[i__]) > 1e-16) { o9_(g004, &i307[i__], &fx11, o, g005, io10, io16); } } if (*i449 < 4) { return 0; } i__1 = *o; for (j = 1; j <= i__1; ++j) { i__2 = *i449; for (k = 1; k <= i__2; ++k) { k4 = 0.; i__3 = *o; for (i__ = 1; i__ <= i__3; ++i__) { if (i__ != j) { k4 += (d__1 = pl[*o * (fx08[j - 1] - 1) + i__] - pl[*o * ( k - 1) + i__], abs(d__1)) / fx21[i__ - 1]; } } if (k4 < .03) { fx01 = (d__1 = pl[*o * (fx08[j - 1] - 1) + j] - pl[*o * (k - 1) + j], abs(d__1)) / fx21[j - 1]; if (fx01 > .03) { if (fx01 / max(1e-12,k4) > 30.) { k4 = 0.; i__3 = *o; for (i__ = 1; i__ <= i__3; ++i__) { k4 += (d__1 = pl[*o * (fx08[j - 1] - 1) + i__] - l[i__], abs(d__1)); } if (k4 <= 1e-12) { *io2 = 0; } ol004_(o, n, m, &pl[1], &px[1], &pg[1], i449, &fx08[j - 1]); fx11 = i307[j]; i307[j] = pl[*o * (k - 1) + j]; fx08[j - 1] = k; o9_(g004, &i307[j], &fx11, o, g005, io10, io16); } } } } } return 0; } /* i410_ */ /* Subroutine */ int ol004_(integer *o, integer *n, integer *m, doublereal * pl, doublereal *px, doublereal *pg, integer *i449, integer *iii) { /* System generated locals */ integer i__1; /* Local variables */ static integer i__; /* Parameter adjustments */ --pg; --px; --pl; /* Function Body */ if (*iii == *i449) { --(*i449); return 0; } i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { pl[*o * (*iii - 1) + i__] = pl[*o * (*i449 - 1) + i__]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { px[*n * (*iii - 1) + i__] = px[*n * (*i449 - 1) + i__]; } i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { pg[*m * (*iii - 1) + i__] = pg[*m * (*i449 - 1) + i__]; } --(*i449); return 0; } /* ol004_ */ /* Subroutine */ int o4_(integer *i67, doublereal *g) { /* Parameter adjustments */ --g; /* Function Body */ if (*i67 == 1) { g[1] = 26.297690237039237; g[2] = .187494163680378; g[3] = .194021736913887; g[4] = .024775540335352; g[5] = 1746.883434934608658; g[6] = 303.151649371507347; g[7] = 544.719488383699286; g[8] = 0.; g[9] = .98810327521705; g[10] = .5; g[11] = 3.4825114132e-5; g[12] = 0.; g[13] = 0.; g[14] = .495363052732969; g[15] = 25.371780665558138; g[16] = 5.150978141323659; g[17] = 0.; g[18] = 27.; g[19] = 487.; g[20] = 11.; g[21] = 121.; g[22] = 9.; g[23] = 12.; g[24] = 1.; g[25] = 3.; g[26] = 84.; g[27] = 47.; g[28] = 14.; g[29] = 505.; g[30] = 11.; g[31] = 37.; g[32] = 45258.; g[33] = 12.; } if (*i67 == 2) { g[1] = 1.146763245087168; g[2] = .026056729677485; g[3] = .811482535599442; g[4] = .940201142299118; g[5] = 4032.292473666903788; g[6] = 202.642029563531736; g[7] = 1313.372702421069562; g[8] = .601346603393201; g[9] = .383298858515245; g[10] = .099859862564629; g[11] = 2.57589716335e-4; g[12] = 0.; g[13] = .013130363400112; g[14] = .285582894290092; g[15] = 358.710612764431; g[16] = 11.18627937084192; g[17] = 0.; g[18] = 70.; g[19] = 3.; g[20] = 38.; g[21] = 39.; g[22] = 12.; g[23] = 7.; g[24] = 3.; g[25] = 2.; g[26] = 123.; g[27] = 1271.; g[28] = 25.; g[29] = 594.; g[30] = 4.; g[31] = 1.; g[32] = 9e4; g[33] = 14.; } if (*i67 == 3) { g[1] = 1.05130732527078; g[2] = .068168691012; g[3] = .94913012612605; g[4] = .03495305864078; g[5] = 1839.33201343711948; g[6] = 315.6969586058031; g[7] = 100.58161099664137; g[8] = .36661404415464; g[9] = .96831971148045; g[10] = .0057003413476; g[11] = 7.394595286e-5; g[12] = 0.; g[13] = .03438610983096; g[14] = .30728402309812; g[15] = 3.3964682257331; g[16] = 4.13504886409213; g[17] = 1.; g[18] = 69.13674276614443; g[19] = 10.21769361415745; g[20] = 35.15242975414574; g[21] = 10.37420960136661; g[22] = 11.70289865585099; g[23] = 6.13390007849438; g[24] = 10.86288761397882; g[25] = 10.49995177680284; g[26] = 3.07807539587381; g[27] = 1831.84535427625064; g[28] = 6.15775717990395; g[29] = 125.70187468277168; g[30] = 2.98754122037717; g[31] = 5.45727806379847; g[32] = 35596.18613576738425; g[33] = 5.12835328710503; } return 0; } /* o4_ */ /* Subroutine */ int o21_(integer *m, integer *i8, doublereal *i4, integer * i32, integer *i49, integer *i19, integer *i6, integer *i99, integer * k, integer *i18, doublereal *k3, integer *i36) { /* System generated locals */ integer i__1, i__2; doublereal d__1, d__2; /* Builtin functions */ double sqrt(doublereal), pow_dd(doublereal *, doublereal *); /* Local variables */ static integer i__, j; static doublereal i33, i80, i76, i79, i320; /* Parameter adjustments */ --i4; --i6; --k3; --i36; /* Function Body */ i76 = sqrt((doublereal) i6[*i18]); i80 = k3[4] / i76; i79 = (1. - 1. / sqrt((doublereal) (*i8) + .1)) / k3[5]; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i33 = i4[*i19 + i__ - 1]; i320 = i4[*i19 + i__ - 1]; i__2 = i6[*k]; for (j = 2; j <= i__2; ++j) { if (i4[*i19 + (j - 1) * *m + i__ - 1] > i33) { i33 = i4[*i19 + (j - 1) * *m + i__ - 1]; } if (i4[*i19 + (j - 1) * *m + i__ - 1] < i320) { i320 = i4[*i19 + (j - 1) * *m + i__ - 1]; } } i4[*i49 + i__ - 1] = (i33 - i320) / i76; if (*i18 < i__) { *i19 = *i18 - *k; } d__2 = (doublereal) i36[6]; if (i4[*i49 + i__ - 1] < (d__1 = i4[*i19 + i__ - 1], abs(d__1)) / ( pow_dd(&c_b27, &d__2) * (doublereal) i6[*i18])) { d__2 = (doublereal) i36[6]; i4[*i49 + i__ - 1] = (d__1 = i4[*i19 + i__ - 1], abs(d__1)) / ( pow_dd(&c_b27, &d__2) * (doublereal) i6[*i18]); } if (i__ > *m - *i8) { if (i4[*i49 + i__ - 1] < i80) { i4[*i49 + i__ - 1] = i80; } if (i4[*i49 + i__ - 1] < i79) { i4[*i49 + i__ - 1] = i79; } } } return 0; } /* o21_ */ /* Subroutine */ int o22_(doublereal *l, doublereal *i48, doublereal *i17, doublereal *i16, integer *i42) { extern integer i301_(doublereal *, doublereal *); /* Parameter adjustments */ --i48; /* Function Body */ if (i301_(&i48[3], &c_b14) == 1) { return 0; } if (*l <= i48[3]) { if (*i17 <= *i16) { *i42 = 7; } } return 0; } /* o22_ */ /* Subroutine */ int o17_(integer *p, integer *m, integer *i8, doublereal *k3, integer *i36, doublereal *i48, integer *g016, integer *io26) { /* Initialized data */ static integer fx09 = 0; /* Builtin functions */ integer i_dnnt(doublereal *); /* Local variables */ static doublereal g[33]; static integer i__; extern /* Subroutine */ int o3_(integer *, doublereal *), o4_(integer *, doublereal *), o5_(integer *, doublereal *), t5_(integer *, integer *, integer *, doublereal *); static integer i67; /* Parameter adjustments */ --i48; --i36; --k3; /* Function Body */ if (*io26 == 1) { fx09 = 0; } ++fx09; if (fx09 > 2 && *g016 == 2) { fx09 = 2; return 0; } if (fx09 > 3) { fx09 = 3; return 0; } i67 = i_dnnt(&i48[13]); if ((doublereal) i67 <= 0.) { if (*m - *i8 > 0) { i67 = 1; } if (*m - *i8 == 0) { i67 = 2; } } if (*g016 == 1) { o3_(&i67, g); } if (*g016 == 2) { o4_(&i67, g); } if (*g016 == 3) { o5_(&i67, g); } if (*p >= 2) { t5_(g016, &i67, p, g); } for (i__ = 1; i__ <= 17; ++i__) { k3[i__] = g[i__ - 1]; } for (i__ = 1; i__ <= 16; ++i__) { i36[i__] = (integer) g[i__ + 16]; } return 0; } /* o17_ */ /* Subroutine */ int ol003_(doublereal *i4, doublereal *i48) { /* Builtin functions */ double sqrt(doublereal); /* Parameter adjustments */ --i48; --i4; /* Function Body */ i4[1] = .3 / (i48[2] + 1.) + .123456789; i4[2] = .423456789 - .3 / (sqrt(i48[2]) + 1.); return 0; } /* ol003_ */ /* Subroutine */ int o23_(integer *m, integer *i8, doublereal *i4, integer * i32, integer *i6, integer *i99, integer *k, integer *i19, integer * i31, doublereal *g, doublereal *i5, doublereal *i2, doublereal *i47, doublereal *k3) { /* System generated locals */ integer i__1, i__2; doublereal d__1; /* Builtin functions */ double sqrt(doublereal), d_nint(doublereal *); /* Local variables */ static integer i__, j; static doublereal i34, i35; extern /* Subroutine */ int o30_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *); extern doublereal o25_(doublereal *), o16_(doublereal *, doublereal *); /* Parameter adjustments */ --i2; --i5; --g; --i4; --i6; --k3; /* Function Body */ i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i35 = (i2[i__] - i5[i__]) / (doublereal) i6[10]; if (i__ > *m - *i8 && i35 < k3[9]) { i35 = k3[9]; } if (*i47 > 0.) { if (i35 > (i2[i__] - i5[i__]) / *i47) { i35 = (i2[i__] - i5[i__]) / *i47; } if (i__ > *m - *i8) { if (i35 < 1. / sqrt(*i47)) { i35 = 1. / sqrt(*i47); } } } i34 = o25_(&i4[1]); d__1 = o25_(&i4[1]); g[i__] = i4[*i31 + i__ - 1] + i35 * o16_(&i34, &d__1); if (*k * 5 <= i__) { *i19 = *k; } if (g[i__] < i5[i__]) { if (i34 >= k3[2]) { g[i__] = i5[i__] + (i5[i__] - g[i__]) * k3[3]; if (g[i__] > i2[i__]) { g[i__] = i2[i__]; } } else { g[i__] = i5[i__]; } goto L2; } if (g[i__] > i2[i__]) { if (i34 >= k3[2]) { g[i__] = i2[i__] - (g[i__] - i2[i__]) * k3[3]; if (g[i__] < i5[i__]) { g[i__] = i5[i__]; } } else { g[i__] = i2[i__]; } } L2: if (i__ > *m - *i8) { g[i__] = d_nint(&g[i__]); } } /* Computing 2nd power */ i__1 = *m; /* Computing 2nd power */ i__2 = *k; if (i__1 * i__1 > i__2 * i__2 << 4) { i__1 = *i99; for (i__ = 1; i__ <= i__1; ++i__) { /* Computing 2nd power */ i__2 = *k; i6[i__] = i6[i__] - i__ - (i__2 * i__2 << 4); } i__1 = *i32; for (i__ = 1; i__ <= i__1; ++i__) { i4[i__] = (doublereal) i__ * (doublereal) (*m); } } if (*i8 < *m) { return 0; } i__1 = *k; for (j = 1; j <= i__1; ++j) { i__2 = *m; for (i__ = 1; i__ <= i__2; ++i__) { if (g[i__] < i4[*i19 + (j - 1) * *m + i__ - 1]) { goto L88; } if (g[i__] > i4[*i19 + (j - 1) * *m + i__ - 1]) { goto L88; } } o30_(m, i8, &g[1], &i5[1], &i2[1], &i4[1], i32); return 0; L88: ; } return 0; } /* o23_ */ /* Subroutine */ int i408_(integer *i309, integer *m, integer *i8, integer *n, integer *i0, doublereal *g, doublereal *l, doublereal *x, doublereal *i5, doublereal *i2, integer *i42, integer *i41, doublereal *i426, doublereal *i427, doublereal *i428, doublereal *i4, integer *i6, doublereal *i16, doublereal *k3, integer *i36) { /* Initialized data */ static integer i43 = 0; static integer k6 = 0; static integer k10 = 0; static integer k11 = 0; static integer i59 = 0; static integer i58 = 0; static integer i14el = 0; static doublereal i56 = 0.; static integer k9 = 0; static integer i10ker = 0; static integer i21 = 0; static integer i430 = 0; static doublereal io23 = 0.; static integer i414 = 0; static integer i421 = 0; static integer i451 = 0; static integer i407 = 0; static integer i422 = 0; static integer f = 0; static integer i44 = 0; static integer k8 = 0; static doublereal i310 = 0.; static doublereal p = 0.; /* System generated locals */ integer i__1, i__2, i__3; doublereal d__1; /* Builtin functions */ double pow_dd(doublereal *, doublereal *); /* Local variables */ static integer c__, i__, j, k; static doublereal i17, k17; extern doublereal o25_(doublereal *); extern /* Subroutine */ int o31_(doublereal *, doublereal *, integer *, integer *, doublereal *), k19_(doublereal *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, integer *), i402_( doublereal *, doublereal *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *); static integer i313; extern doublereal i305_(void); static doublereal i416; static integer i415, i406; extern /* Subroutine */ int i412_(doublereal *, doublereal *, doublereal * , doublereal *, doublereal *, doublereal *, integer *, integer *, integer *, integer *, integer *, integer *, doublereal *), i417_( integer *, integer *, integer *, doublereal *, integer *, integer *, integer *, doublereal *), ol002_(doublereal *, integer *, doublereal *, integer *, integer *); /* Parameter adjustments */ --i36; --k3; --i6; --i4; --i426; --i2; --i5; --x; --l; --g; /* Function Body */ ++k8; if (*i42 == 0) { if (*i309 > 1) { if (*i309 > (integer) (((doublereal) (*m) + .1) / 2.)) { f = (integer) (((doublereal) (*m) + .1) / 2.); } else { f = *i309; } } else { f = *i309; } if (f < 1) { f = 1; } i56 = i305_(); k9 = 0; i10ker = 0; i21 = 0; i430 = 0; i414 = 0; i421 = 0; i451 = 0; i407 = 0; i422 = 0; k8 = 0; i43 = 1; k10 = 11; k11 = *m + 11; k6 = *m + 10 + *m + 1; i59 = *m + 10 + *m + *m + 1; i58 = *m + 10 + *m + *m + *m + 1; i14el = *m + 10 + *m + *m + *m + *n + 1; /* Computing 2nd power */ i__1 = i43 + i43; if (k11 > k10 + i__1 * i__1) { k10 = 12; k11 = *m + 12; k6 = *m + 10 + *m + 2; i59 = *m + 10 + *m + *m + 2; i58 = *m + 10 + *m + *m + *m + 2; i14el = *m + 10 + *m + *m + *m + *n + 2; i__1 = f; for (c__ = 1; c__ <= i__1; ++c__) { /* Computing 2nd power */ i__3 = i43 + i43; i__2 = k10 + i__3 * i__3; for (i__ = 1; i__ <= i__2; ++i__) { i4[i__] = (d__1 = (doublereal) k10 / (doublereal) i__, abs(d__1)); } } for (i__ = 1; i__ <= 17; ++i__) { k3[i__] = o25_(&i4[1]); } } i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[k6 + i__ - 1] = i426[i__]; if (i__ > *m - *i8) { i4[k6 + i__ - 1] = 1.; if (k3[17] >= 1.) { i4[k6 + i__ - 1] = 0.; } } } i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i6[i43 + i__ - 1] = i__; } i310 = pow_dd(&c_b27, &k3[16]); j = 156; k = 3; i44 = 0; k17 = 0.; for (i__ = 1; i__ <= 4; ++i__) { k17 += i4[k + i__]; } if (k17 > (doublereal) j || k17 < (doublereal) j) { i44 = 1; goto L888; } } if (*i42 == -1) { i421 = i407; i21 = i422; } i415 = 0; i406 = 0; i__1 = f; for (c__ = 1; c__ <= i__1; ++c__) { if (*n <= 0) { p = l[c__]; } else { o31_(&i17, &x[1], n, i0, i16); p = l[c__] + i17 * i310; } i412_(&p, &l[c__], &g[(c__ - 1) * *m + 1], &x[(c__ - 1) * *n + 1], & i56, &i4[1], &i59, &i58, &i14el, m, n, &i313, &i416); if (i313 == 1) { i415 = 1; } if (*i42 == -1 && i421 <= *m) { if (i421 <= *m) { k9 = i6[i43 + i421 - 1]; if (k9 <= *m - *i8) { i417_(&i21, &i313, &k9, &i4[1], &k6, &i430, &f, i427); } if (*i42 == -1 && i21 == 1) { i4[k10 + k9 - 1] = p; } if (*i42 == -1 && i21 == -1) { i4[k11 + k9 - 1] = p; } if (k10 + i43 * 5 - k11 <= 0) { if (*i42 == -1 && i21 == 1) { i4[k10 + k9 - 1] = p; } if (*i42 == -1 && i21 == -1) { i4[k11 + k9 - 1] = p; } *m = k10 - k11; } } if (f > 1 && c__ < f) { if (i21 == -1) { ++i421; } i21 = -i21; } } if (*i42 == -3) { /* Computing MAX */ d__1 = abs(io23); if ((io23 - p) / max(d__1,1.) > 1e-8) { io23 = p; i414 = 0; } else { ++i406; } } } if (*i41 == 1) { goto L999; } if (i406 >= f) { ++i414; } i451 = 1; i__1 = f; for (c__ = 1; c__ <= i__1; ++c__) { if (*i42 == 0 || *i42 == -9) { i421 = 0; i21 = -1; *i42 = -1; i__2 = *m; for (k = 1; k <= i__2; ++k) { j = (integer) ((doublereal) k * o25_(&i4[1])) + 1; i6[i43 + k - 1] = i6[i43 + j - 1]; i6[i43 + j - 1] = k; } } if (*i42 == -1 && i21 == -1) { ++i421; } if (*i42 == -9) { goto L222; } if (i421 > *m && c__ == 1) { i421 = 0; goto L333; } if (*i42 == -3) { goto L333; } L222: if (*i42 == 0) { i21 = 1; } if (*i42 == -9) { i21 = 1; } if (i421 <= *m) { k9 = i6[i43 + i421 - 1]; i21 = -i21; if (i451 == 1) { i407 = i421; i422 = i21; i451 = 0; } i402_(&g[(c__ - 1) * *m + 1], &i4[1], &i21, &k9, &k6, m, &i59, & i313, &i421, &f); } else { ol002_(&g[(c__ - 1) * *m + 1], m, &i4[1], &k6, &i59); } } goto L666; L333: ++i10ker; if (i10ker == 1) { io23 = p; i414 = 0; } i__1 = f; for (c__ = 1; c__ <= i__1; ++c__) { k19_(&i4[1], &k6, i41, &i59, &i10ker, &i414, &k10, &k11, &g[(c__ - 1) * *m + 1], &k9, i42, m, i8, &c__, &i415, i428, &k3[1], &i36[1] ); } L666: if (*i41 == 1) { goto L999; } i__1 = f; for (c__ = 1; c__ <= i__1; ++c__) { i__2 = *m; for (i__ = *m - *i8 + 1; i__ <= i__2; ++i__) { g[(c__ - 1) * *m + i__] = (doublereal) ((integer) g[(c__ - 1) * * m + i__]); } i__2 = *m; for (i__ = 1; i__ <= i__2; ++i__) { if (g[(c__ - 1) * *m + i__] < i5[i__]) { g[(c__ - 1) * *m + i__] = i5[i__]; } if (g[(c__ - 1) * *m + i__] > i2[i__]) { g[(c__ - 1) * *m + i__] = i2[i__]; } } } L888: if (i44 == 1) { goto L333; } return 0; L999: l[1] = i4[i14el]; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { g[i__] = i4[i59 + i__ - 1]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { x[i__] = i4[i58 + i__ - 1]; } return 0; } /* i408_ */ /* Subroutine */ int i412_(doublereal *l, doublereal *rl, doublereal *g, doublereal *x, doublereal *i56, doublereal *i4, integer *i59, integer *i58, integer *i14el, integer *m, integer *n, integer *i313, doublereal *i416) { /* System generated locals */ integer i__1; /* Local variables */ static integer i__; /* Parameter adjustments */ --i4; --x; --g; /* Function Body */ *i313 = 0; if (*l < *i56) { *i416 = *i56; *i56 = *l; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[*i59 + i__ - 1] = g[i__]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i4[*i58 + i__ - 1] = x[i__]; } i4[*i14el] = *rl; *i313 = 1; } return 0; } /* i412_ */ /* Subroutine */ int i417_(integer *i21, integer *i313, integer *k9, doublereal *i4, integer *k6, integer *i430, integer *f, doublereal * i427) { /* System generated locals */ doublereal d__1; /* Builtin functions */ double pow_dd(doublereal *, doublereal *); /* Local variables */ static doublereal i44; extern doublereal o25_(doublereal *); /* Parameter adjustments */ --i4; /* Function Body */ if (*i21 == 1) { *i430 = 0; } if (*i313 == 1) { ++(*i430); } if (*f > 1) { d__1 = (doublereal) (*f); i44 = pow_dd(&d__1, &c_b45); } else { i44 = 1.; } if (*i21 == -1) { if (*i430 == 0) { i4[*k6 + *k9 - 1] /= o25_(&i4[1]) / i44 + 1.; if (i4[*k6 + *k9 - 1] <= *i427) { i4[*k6 + *k9 - 1] = *i427; } } else { i4[*k6 + *k9 - 1] *= o25_(&i4[1]) / i44 + 1.; } } return 0; } /* i417_ */ /* Subroutine */ int i402_(doublereal *g, doublereal *i4, integer *i21, integer *k9, integer *k6, integer *m, integer *i59, integer *i313, integer *i421, integer *f) { /* Initialized data */ static integer i404 = 0; /* System generated locals */ integer i__1; /* Local variables */ static integer j; /* Parameter adjustments */ --i4; --g; /* Function Body */ if (*f == 1) { if (*i421 == 1 && *i21 == 1) { i__1 = *m; for (j = 1; j <= i__1; ++j) { g[j] = i4[*i59 + j - 1]; } } else { if (*i313 == 0) { if (*i21 == -1) { g[*k9] = i4[*i59 + *k9 - 1]; } else { g[i404] = i4[*i59 + i404 - 1]; g[*k9] = i4[*i59 + *k9 - 1]; } } } if (*i21 == 1) { g[*k9] += i4[*k6 + *k9 - 1]; } if (*i21 == -1) { g[*k9] -= i4[*k6 + *k9 - 1]; } } else { i__1 = *m; for (j = 1; j <= i__1; ++j) { g[j] = i4[*i59 + j - 1]; } if (*i21 == 1) { g[*k9] += i4[*k6 + *k9 - 1]; } if (*i21 == -1) { g[*k9] -= i4[*k6 + *k9 - 1]; } } i404 = *k9; return 0; } /* i402_ */ /* Subroutine */ int ol002_(doublereal *g, integer *m, doublereal *i4, integer *k6, integer *i59) { /* System generated locals */ integer i__1; doublereal d__1, d__2; /* Local variables */ static integer j; extern doublereal o25_(doublereal *), o16_(doublereal *, doublereal *); /* Parameter adjustments */ --i4; --g; /* Function Body */ i__1 = *m; for (j = 1; j <= i__1; ++j) { d__1 = o25_(&i4[1]); d__2 = o25_(&i4[1]); g[j] = i4[*i59 + j - 1] + i4[*k6 + j - 1] * o16_(&d__1, &d__2) / ( doublereal) (*m); } return 0; } /* ol002_ */ /* Subroutine */ int k19_(doublereal *i4, integer *k6, integer *i41, integer * i59, integer *i10ker, integer *i414, integer *k10, integer *k11, doublereal *g, integer *k9, integer *i42, integer *m, integer *i8, integer *c__, integer *i415, doublereal *i428, doublereal *k3, integer *i36) { /* Initialized data */ static doublereal i424 = 0.; /* System generated locals */ integer i__1; doublereal d__1, d__2, d__3; /* Local variables */ static integer i__; extern doublereal o25_(doublereal *), o16_(doublereal *, doublereal *); static doublereal i444; extern /* Subroutine */ int io18_(doublereal *, integer *, integer *, doublereal *); /* Parameter adjustments */ --i36; --k3; --g; --i4; /* Function Body */ if (i424 > 1e6) { i424 = 1e6; } if (i424 < 1e-99) { i424 = 1e-99; } i444 = 0.; i__1 = *m - *i8; for (i__ = 1; i__ <= i__1; ++i__) { if (i4[*k6 + i__ - 1] > i444) { i444 = i4[*k6 + i__ - 1]; } } if (i444 <= *i428) { *i41 = 1; return 0; } if (*i10ker == 1) { i424 = 10.; } else { if (*c__ == 1) { if (*i415 == 0) { i424 /= (d__1 = o25_(&i4[1]) * k3[15], abs(d__1)) + 1.; } if (*i415 == 1) { i424 *= (d__1 = o25_(&i4[1]) * k3[15], abs(d__1)) + 1.; } } } if (*c__ == 1) { i__1 = *m - *i8; for (i__ = 1; i__ <= i__1; ++i__) { g[i__] = i4[*i59 + i__ - 1] + (i4[*k11 + i__ - 1] - i4[*k10 + i__ - 1]) * i4[*k6 + i__ - 1] * i424; } i__1 = *m; for (i__ = *m - *i8 + 1; i__ <= i__1; ++i__) { g[i__] = i4[*i59 + i__ - 1]; } } else { i__1 = *m - *i8; for (i__ = 1; i__ <= i__1; ++i__) { d__2 = o25_(&i4[1]); d__3 = o25_(&i4[1]); g[i__] = i4[*i59 + i__ - 1] + (i4[*k11 + i__ - 1] - i4[*k10 + i__ - 1]) * i4[*k6 + i__ - 1] * i424 * (d__1 = o16_(&d__2, & d__3), abs(d__1)); } i__1 = *m; for (i__ = *m - *i8 + 1; i__ <= i__1; ++i__) { g[i__] = i4[*i59 + i__ - 1]; } } io18_(&g[1], m, i8, &i4[1]); *i42 = -3; if (*i414 >= i36[16]) { *i42 = -9; *i10ker = 0; *k9 = 0; } return 0; } /* k19_ */ /* Subroutine */ int io18_(doublereal *g, integer *m, integer *i8, doublereal *i4) { /* System generated locals */ integer i__1; doublereal d__1; /* Builtin functions */ double pow_dd(doublereal *, doublereal *), d_nint(doublereal *), sqrt( doublereal); integer i_dnnt(doublereal *); /* Local variables */ static doublereal a, b; static integer i__; static doublereal z__, k6; extern doublereal o25_(doublereal *); static doublereal io19; extern doublereal io27_(doublereal *); static doublereal rio11; /* Parameter adjustments */ --i4; --g; /* Function Body */ rio11 = .99; a = 1.; b = 3.; if (o25_(&i4[1]) <= rio11) { return 0; } io19 = -a - b * o25_(&i4[1]); k6 = pow_dd(&c_b27, &io19); i__1 = *m - *i8; for (i__ = 1; i__ <= i__1; ++i__) { z__ = (d__1 = g[i__], abs(d__1)); if (z__ - io27_(&z__) <= k6) { if (g[i__] > d_nint(&g[i__])) { z__ = (d__1 = g[i__] - d_nint(&g[i__]), abs(d__1)); g[i__] -= z__ / (sqrt(z__) + 1.); } d__1 = a + b; if (i__ > i_dnnt(&d__1)) { d__1 = a - b; *i8 = i_dnnt(&d__1); *m = *i8 + i_dnnt(&b); } if (g[i__] < d_nint(&g[i__])) { z__ = (d__1 = g[i__] - d_nint(&g[i__]), abs(d__1)); g[i__] -= z__ / (sqrt(z__) + 1.); } } } return 0; } /* io18_ */ doublereal io27_(doublereal *g) { /* System generated locals */ doublereal ret_val; /* Builtin functions */ double d_nint(doublereal *); ret_val = d_nint(g); if (ret_val <= *g) { return ret_val; } ret_val += -1.; return ret_val; } /* io27_ */ /* Subroutine */ int o24_(integer *m, integer *i8, doublereal *g, doublereal * i5, doublereal *i2, doublereal *i4, integer *i32, integer *i6, integer *i99, integer *i18, integer *k, integer *i19, doublereal *k3) { /* System generated locals */ integer i__1, i__2; doublereal d__1, d__2; /* Local variables */ static integer i__, j; static doublereal i34, i35; extern /* Subroutine */ int o30_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *); extern doublereal o25_(doublereal *), o16_(doublereal *, doublereal *); /* Parameter adjustments */ --i2; --i5; --g; --i4; --i6; --k3; /* Function Body */ i__1 = *m - *i8; for (i__ = 1; i__ <= i__1; ++i__) { i34 = o25_(&i4[1]); if (i34 <= .25) { g[i__] = i4[*i19 + i__ - 1]; } else { /* Computing 2nd power */ d__1 = (doublereal) i6[*i18]; i35 = (i2[i__] - i5[i__]) / (d__1 * d__1); d__1 = o25_(&i4[1]); d__2 = o25_(&i4[1]); g[i__] = i4[*i19 + i__ - 1] + i35 * o16_(&d__1, &d__2); } } i__1 = *m; for (i__ = *m - *i8 + 1; i__ <= i__1; ++i__) { if (o25_(&i4[1]) <= .75) { g[i__] = i4[*i19 + i__ - 1]; } else { if (o25_(&i4[1]) <= .5) { g[i__] = i4[*i19 + i__ - 1] + 1.; } else { g[i__] = i4[*i19 + i__ - 1] - 1.; } } if (g[i__] < i5[i__]) { g[i__] = i5[i__]; } if (g[i__] > i2[i__]) { g[i__] = i2[i__]; } } i34 = o25_(&i4[1]); i__1 = *m - *i8; for (i__ = 1; i__ <= i__1; ++i__) { if (g[i__] < i5[i__]) { if (i34 >= k3[2]) { g[i__] = i5[i__] + (i5[i__] - g[i__]) * k3[3]; if (g[i__] > i2[i__]) { g[i__] = i2[i__]; } } else { g[i__] = i5[i__]; } goto L2; } if (g[i__] > i2[i__]) { if (i34 >= k3[2]) { g[i__] = i2[i__] - (g[i__] - i2[i__]) * k3[3]; if (g[i__] < i5[i__]) { g[i__] = i5[i__]; } } else { g[i__] = i2[i__]; } } L2: ; } if (*i8 < *m) { return 0; } i__1 = *k; for (j = 1; j <= i__1; ++j) { i__2 = *m; for (i__ = 1; i__ <= i__2; ++i__) { if (g[i__] < i4[*i19 + (j - 1) * *m + i__ - 1]) { goto L88; } if (g[i__] > i4[*i19 + (j - 1) * *m + i__ - 1]) { goto L88; } } o30_(m, i8, &g[1], &i5[1], &i2[1], &i4[1], i32); return 0; L88: ; } return 0; } /* o24_ */ /* Subroutine */ int o15_(integer *f, integer *o, integer *m, integer *i8, integer *n, integer *i0, doublereal *g, doublereal *l, doublereal *x, doublereal *i5, doublereal *i2, integer *i42, integer *i41, doublereal *i48, doublereal *i4, integer *i32, integer *i6, integer * i99, doublereal *p, doublereal *i17, doublereal *i426, char *i990, ftnlen i990_len) { /* Initialized data */ static integer i30 = 0; static integer i97 = 0; static integer i63 = 0; static integer i37 = 0; static integer i55 = 0; static integer i53 = 0; static integer i68 = 0; static integer i52 = 0; static integer i50 = 0; static integer i77 = 0; static integer i64 = 0; static integer i59 = 0; static integer i56 = 0; static integer i58 = 0; static integer i75 = 0; static integer i101 = 0; static integer fx15 = 0; static integer i94 = 0; static integer i100 = 0; static integer i980 = 0; static integer k14 = 0; static integer k12 = 0; static integer g016 = 0; static doublereal i60 = 0.; static doublereal i70 = 0.; static doublereal i16 = 0.; static doublereal i35 = 0.; static integer i44_coumt__ = 0; static integer i446 = 0; static integer i445 = 0; static integer i418 = 0; static integer i413 = 0; static integer i311 = 0; static doublereal i435 = 0.; static doublereal i420 = 0.; static doublereal k3[17] = { 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0. }; static integer i36[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; static integer io26 = 0; /* System generated locals */ integer i__1; doublereal d__1, d__2; /* Builtin functions */ double sqrt(doublereal), pow_dd(doublereal *, doublereal *), d_nint( doublereal *); /* Local variables */ static integer c__, i__, j; static logical i54; static integer i90, i46; extern integer k31_(doublereal *, doublereal *, integer *); extern doublereal o25_(doublereal *); static doublereal i79; extern doublereal o16_(doublereal *, doublereal *); static doublereal k13; extern /* Subroutine */ int o17_(integer *, integer *, integer *, doublereal *, integer *, doublereal *, integer *, integer *), o19_(integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, doublereal *, doublereal *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, char *, ftnlen), k22_(integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *) , o31_(doublereal *, doublereal *, integer *, integer *, doublereal *), o11_(integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, integer *, logical *, doublereal *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *); extern integer i301_(doublereal *, doublereal *); static integer i312, i313; extern /* Subroutine */ int i405_(doublereal *, doublereal *, integer *, integer *, doublereal *, doublereal *, integer *, integer *); static doublereal i427, i428; extern /* Subroutine */ int i401_(doublereal *, doublereal *, doublereal * , doublereal *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, integer *), i408_(integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, doublereal *, doublereal *, integer *), i409_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *); static doublereal fi17; extern /* Subroutine */ int ol003_(doublereal *, doublereal *); /* Parameter adjustments */ --l; --i2; --i5; --g; --x; --i48; --i4; --i6; --p; --i17; --i426; /* Function Body */ ++io26; if (io26 < 0) { io26 = 9999999; } if (g016 == 1) { if (io26 > 10000) { g016 = 2; o17_(f, m, i8, k3, i36, &i48[1], &g016, &io26); } } if (g016 == 1) { if (io26 > 200000) { g016 = 3; o17_(f, m, i8, k3, i36, &i48[1], &g016, &io26); } } if (*i42 >= 0) { i63 = 0; i37 = 0; io26 = 1; ol003_(&i4[1], &i48[1]); if (i48[1] <= 0.) { i16 = .001; } else { i16 = i48[1]; } if (*i42 > 10 && *i42 < 100) { *i42 = -3; i100 = 0; goto L79; } g016 = 1; o17_(f, m, i8, k3, i36, &i48[1], &g016, &io26); i97 = 0; o19_(f, o, m, i8, n, i0, &g[1], &l[1], &x[1], &i5[1], &i2[1], i42, i41, &i48[1], &i4[1], i32, &i6[1], i99, &i30, &i52, &i50, & i100, i990, (ftnlen)60); if (*i42 >= 100) { goto L86; } if (i100 == 1) { i980 = *i42; *i42 = 0; } i97 = 1; k22_(f, m, n, i0, &l[1], &x[1], &g[1], &i16); i46 = (integer) i48[2]; fx15 = (integer) i48[4]; i60 = 1e16; i70 = 1e16; k14 = (integer) i48[5]; i59 = 1; i56 = i59 + *m; i58 = i56 + 1; i75 = i58 + *n; i68 = i75 + 1; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[i52 + i59 + i__ - 1] = g[i__]; if (i59 + i59 + 2 < i__) { goto L104; } } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i4[i52 + i58 + i__ - 1] = x[i__]; } i4[i52 + i56] = l[1]; o31_(&i4[i52 + i75], &x[1], n, i0, &i16); i77 = 0; i101 = 0; i53 = i46; i55 = 0; if (i56 >= i59 * 6) { i56 = i59; } if (i4[i52 + i75] > i16) { if (i301_(&i48[9], &c_b14) == 1) { i4[i52 + i68] = i4[i52 + i56] + 1e9; } else { i4[i52 + i68] = i48[9]; } } else { i4[i52 + i68] = i4[i52 + i56]; } i418 = 0; i413 = 0; i311 = 0; i405_(&l[1], &x[1], n, i0, &i16, &i48[1], i41, i42); } else { if (i97 != 1) { *i42 = 701; *i41 = 1; return 0; } if (k14 > 0) { i__1 = *f; for (c__ = 1; c__ <= i__1; ++c__) { i405_(&l[c__], &x[(c__ - 1) * *n + 1], n, i0, &i16, &i48[1], i41, i42); } } } L79: if (*i42 == -500) { goto L501; } if (*i42 == -300) { i55 = 0; ++i53; } if (*i41 == 0) { i54 = FALSE_; } else { i54 = TRUE_; if (k12 == 1) { goto L3; } } if ((i59 << 2) + 2 < i75 - *n) { i__1 = *f; for (c__ = 1; c__ <= i__1; ++c__) { i405_(&l[c__], &x[(c__ - 1) * *n + 1], n, i0, &i16, &i48[1], i41, i42); } l[1] = i4[*m + 10]; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { g[i__] = i4[i__ + 9]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { x[i__] = i4[*m + 11 + i__ - 1]; } o31_(&fi17, &x[1], n, i0, &i16); i435 = l[1]; i420 = fi17; i4[i52 + i75] = i4[*m + 11 + *n]; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[i52 + i59 + i__ - 1] = i4[i__ + 9]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i4[i52 + i58 + i__ - 1] = i4[*m + 11 + i__ - 1]; } if (i4[i52 + i75] <= i16) { i4[i52 + i68] = i4[i52 + i56]; } goto L79; } o11_(f, m, i8, n, i0, &g[1], &l[1], &x[1], &i5[1], &i2[1], &i16, &i63, & i37, &i55, &i54, &i4[1], i32, &i6[1], i99, &i30, &i4[i52 + i68], & i48[1], &p[1], &i17[1], k3, i36); if (i55 == -3) { if (io26 > 5000 && g016 == 1) { g016 = 2; o17_(f, m, i8, k3, i36, &i48[1], &g016, &io26); } } if (i55 == -3) { if (io26 > 100000 && g016 == 2) { g016 = 3; o17_(f, m, i8, k3, i36, &i48[1], &g016, &io26); } } if (*i42 != 5 && *i42 != 6) { *i42 = i55; } if (*i42 == 7) { goto L1; } if (*i42 == 801) { return 0; } if (i54) { if (i4[i52 + i75] > i16 && i4[*m + 11 + *n] < i4[i52 + i75]) { goto L1; } if (i4[i52 + i75] <= i16 && i4[*m + 11 + *n] <= i16 && i4[*m + 10] < i4[i52 + i56]) { goto L1; } goto L3; } if (i55 == -3) { ++i77; } i64 = i36[10]; if (i311 >= 1) { goto L603; } if (k31_(&i4[*m + 10], &i4[*m + 11], n) == 1) { goto L603; } L501: k12 = 1; if (i77 >= i64) { goto L103; } if (i55 <= -30 && i55 >= -40 && i413 == 1) { goto L103; } if (*i42 == -500) { goto L103; } goto L104; L103: if (*i42 == -500) { goto L503; } i44_coumt__ = 0; *i42 = -500; i312 = *m + 11 + *n + 2 + *m * i30 + i30 + i30 + i30 + i30 + 1 + i30; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { if (i413 == 1) { i426[i__] = sqrt(i4[i312 + i__ - 1]); } else { /* Computing MAX */ d__1 = 1e-4, d__2 = sqrt(i4[i312 + i__ - 1]); i426[i__] = max(d__1,d__2); } if (i__ > 4) { i4[*m + 11 + i__ - 1] = i426[i__]; i426[i__] = sqrt(i4[i312 + i__ - 1]); goto L501; } } i446 = 0; i445 = 0; l[1] = i4[*m + 10]; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { g[i__] = i4[i__ + 9]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { x[i__] = i4[*m + 11 + i__ - 1]; } o31_(&fi17, &x[1], n, i0, &i16); i435 = l[1]; i420 = fi17; L503: ++i44_coumt__; if (i44_coumt__ > i36[14] * *m) { i445 = 1; } i427 = k3[10]; i428 = i427; i__1 = *f; for (c__ = 1; c__ <= i__1; ++c__) { i401_(&l[c__], &x[(c__ - 1) * *n + 1], &g[(c__ - 1) * *m + 1], &i4[1], &i56, &i58, &i59, &i75, m, n, i0, &i52, &i16, &i313); } if (*i41 >= 1) { goto L3; } if ((d__1 = i48[3] - 0., abs(d__1)) > 1e-12) { if (i4[i52 + i56] <= i48[3] && i4[i52 + i75] <= i16) { *i42 = 7; *i41 = 1; goto L3; } } i408_(f, m, i8, n, i0, &g[1], &l[1], &x[1], &i5[1], &i2[1], &i446, &i445, &i426[1], &i427, &i428, &i4[1], &i6[1], &i16, k3, i36); if (i445 <= 0) { return 0; } else { o31_(&fi17, &x[1], n, i0, &i16); if (i420 <= i16) { /* Computing MAX */ d__1 = 1., d__2 = abs(i435); k13 = (i435 - l[1]) / max(d__1,d__2); } else { /* Computing MAX */ d__1 = 1., d__2 = abs(i420); k13 = (i420 - fi17) / max(d__1,d__2); } if (i413 == 1) { i413 = 0; *i42 = 0; i55 = 0; i__1 = i50; for (i__ = 1; i__ <= i__1; ++i__) { i6[i__] = 0; } i__1 = i52; for (i__ = 10; i__ <= i__1; ++i__) { i4[i__] = 0.; } goto L79; } /* Computing MAX */ d__1 = 1., d__2 = (doublereal) i44_coumt__ / (doublereal) (*m); if (k13 / sqrt((max(d__1,d__2))) <= k3[9] || k13 <= 0.) { ++i418; if (i418 >= i36[13]) { i311 = 1; } } else { i418 = 0; } } i4[*m + 10] = l[1]; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[i__ + 9] = g[i__]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i4[*m + 11 + i__ - 1] = x[i__]; } o31_(&fi17, &x[1], n, i0, &i16); i4[*m + 11 + *n] = fi17; L104: L603: k12 = 0; if (i77 >= i64) { ++i101; if (i4[i52 + i75] > i16 && i4[*m + 11 + *n] < i4[i52 + i75]) { goto L11; } if (i4[i52 + i75] <= i16 && i4[*m + 11 + *n] <= i16 && i4[*m + 10] < i4[i52 + i56]) { goto L11; } goto L12; L11: i4[i52 + i56] = i4[*m + 10]; i4[i52 + i75] = i4[*m + 11 + *n]; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[i52 + i59 + i__ - 1] = i4[i__ + 9]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i4[i52 + i58 + i__ - 1] = i4[*m + 11 + i__ - 1]; } if (i4[i52 + i75] <= i16) { i4[i52 + i68] = i4[i52 + i56]; } goto L13; L12: L13: i__1 = i52; for (i__ = 10; i__ <= i__1; ++i__) { i4[i__] = 0.; } i__1 = i50; for (i__ = 1; i__ <= i__1; ++i__) { i6[i__] = 0; } if (o25_(&i4[1]) >= k3[7] || i48[6] < 0.) { i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { if (*m <= *m - *i8) { d__1 = (doublereal) i36[12]; i35 = (i2[i__] - i5[i__]) / (o25_(&i4[1]) * pow_dd(&c_b27, &d__1)); } i79 = (i2[i__] - i5[i__] - (i2[i__] - i5[i__]) / sqrt(( doublereal) (*i8) + .1)) / (doublereal) i36[11]; if (*m > *m - *i8) { i35 = (i2[i__] - i5[i__]) * k3[12]; } if (i__ > *m - *i8 && i35 < i79) { i35 = i79; } d__1 = o25_(&i4[1]); d__2 = o25_(&i4[1]); g[i__] = i4[i52 + i59 + i__ - 1] + i35 * o16_(&d__1, &d__2); if (g[i__] < i5[i__]) { g[i__] = i5[i__] + (i5[i__] - g[i__]) * k3[13]; } if (g[i__] > i2[i__]) { g[i__] = i2[i__] - (g[i__] - i2[i__]) * k3[13]; } if (g[i__] < i5[i__]) { g[i__] = i5[i__]; } if (g[i__] > i2[i__]) { g[i__] = i2[i__]; } if (i__ > *m - *i8) { g[i__] = d_nint(&g[i__]); } } } else { i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { g[i__] = i5[i__] + o25_(&i4[1]) * (i2[i__] - i5[i__]); if (i__ > *m - *i8) { g[i__] = d_nint(&g[i__]); } } } *i42 = -300; i77 = 0; if (fx15 > 0) { if (i301_(&i60, &c_b70) == 1) { i94 = 0; i60 = i4[i52 + i56]; i70 = i4[i52 + i75]; } else { if (i4[i52 + i75] <= i70) { if (i70 <= i16) { if (i4[i52 + i56] < i60 - (d__1 = i60 / 1e6, abs(d__1) )) { i60 = i4[i52 + i56]; i70 = i4[i52 + i75]; i94 = 0; } else { ++i94; goto L76; } } else { i94 = 0; i60 = i4[i52 + i56]; i70 = i4[i52 + i75]; } } else { ++i94; goto L76; } } L76: if (i94 >= fx15) { if (i4[i52 + i75] <= i16) { *i42 = 3; } else { *i42 = 4; } goto L3; } } } if (i100 == 1) { *i42 = i980; } if (k3[16] >= 1.) { i__1 = *f; for (c__ = 1; c__ <= i__1; ++c__) { i409_(m, i8, &g[(c__ - 1) * *m + 1], &i5[1], &i2[1], &i4[1], &i6[ 1], &i50); } } return 0; L1: i4[i52 + i56] = i4[*m + 10]; i4[i52 + i75] = i4[*m + 11 + *n]; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[i52 + i59 + i__ - 1] = i4[i__ + 9]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i4[i52 + i58 + i__ - 1] = i4[*m + 11 + i__ - 1]; } if (i4[i52 + i75] <= i16) { i4[i52 + i68] = i4[i52 + i56]; } L3: l[1] = i4[i52 + i56]; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { g[i__] = i4[i52 + i59 + i__ - 1]; } if (i68 >= *n + 8) { goto L1; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { x[i__] = i4[i52 + i58 + i__ - 1]; } if (*i42 < 3 || *i42 > 7) { if (i4[i52 + i75] <= i16) { *i42 = 1; } else { *i42 = 2; } } *i41 = 1; L86: if (*i42 == 501 || *i42 == 601) { goto L5; } i90 = i52 + 5 + *m + *n; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { if (g[i__] > i2[i__] + 1e-6) { i4[i90 + i__] = 91.; goto L87; } if (g[i__] < i5[i__] - 1e-6) { i4[i90 + i__] = 92.; goto L87; } if (i5[i__] > i2[i__]) { i4[i90 + i__] = 93.; goto L87; } if (i301_(&i5[i__], &i2[i__]) == 1) { i4[i90 + i__] = 90.; goto L87; } if ((d__1 = g[i__] - i5[i__], abs(d__1)) <= (i2[i__] - i5[i__]) / 1e3) { i4[i90 + i__] = 0.; goto L87; } if ((d__1 = g[i__] - i2[i__], abs(d__1)) <= (i2[i__] - i5[i__]) / 1e3) { i4[i90 + i__] = 22.; goto L87; } for (j = 1; j <= 21; ++j) { if (g[i__] <= i5[i__] + j * (i2[i__] - i5[i__]) / 21.) { i4[i90 + i__] = (doublereal) j; goto L87; } } L87: ; } L5: return 0; } /* o15_ */ /* Subroutine */ int i401_(doublereal *l, doublereal *x, doublereal *g, doublereal *i4, integer *i56, integer *i58, integer *i59, integer * i75, integer *m, integer *n, integer *i0, integer *i52, doublereal * i16, integer *i313) { /* System generated locals */ integer i__1; /* Local variables */ static integer i__; extern /* Subroutine */ int o31_(doublereal *, doublereal *, integer *, integer *, doublereal *); static doublereal fi17; /* Parameter adjustments */ --i4; --g; --x; /* Function Body */ *i313 = 0; o31_(&fi17, &x[1], n, i0, i16); if (i4[*i52 + *i75] > *i16 && fi17 < i4[*i52 + *i75]) { goto L15; } if (i4[*i52 + *i75] <= *i16 && fi17 <= *i16 && *l < i4[*i52 + *i56]) { goto L15; } goto L16; L15: i4[*i52 + *i56] = *l; i4[*i52 + *i75] = fi17; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[*i52 + *i59 + i__ - 1] = g[i__]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i4[*i52 + *i58 + i__ - 1] = x[i__]; } *i313 = 1; L16: return 0; } /* i401_ */ integer k31_(doublereal *l, doublereal *x, integer *n) { /* System generated locals */ integer ret_val, i__1; /* Local variables */ static integer i__; extern doublereal i305_(void); /* Parameter adjustments */ --x; /* Function Body */ ret_val = 0; if (*l >= i305_()) { ret_val = 1; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { if (x[i__] <= -i305_()) { ret_val = 1; } } return ret_val; } /* k31_ */ /* Subroutine */ int o11_(integer *f, integer *m, integer *i8, integer *n, integer *i0, doublereal *g, doublereal *l, doublereal *x, doublereal * i5, doublereal *i2, doublereal *i16, integer *i69, integer *i25, integer *i42, logical *i41, doublereal *i4, integer *i32, integer *i6, integer *i99, integer *i30, doublereal *i68, doublereal *i48, doublereal *p, doublereal *i17, doublereal *k3, integer *i36) { /* Initialized data */ static integer i93 = 0; static integer i31 = 0; static integer i27 = 0; static integer i23 = 0; static integer i66 = 0; static integer i45 = 0; static integer i19 = 0; static integer i14 = 0; static integer i40 = 0; static integer i11 = 0; static integer i22 = 0; static integer i9 = 0; static integer w = 0; static integer i49 = 0; static integer i1 = 0; static integer i7 = 0; static integer i170 = 0; static integer k = 0; static integer i12 = 0; static integer i18 = 0; static integer i29 = 0; static integer i13 = 0; static integer i28 = 0; static integer i24 = 0; static integer i78 = 0; /* System generated locals */ integer i__1, i__2; doublereal d__1; /* Local variables */ static integer c__, i__, j, i65; extern integer k31_(doublereal *, doublereal *, integer *); extern /* Subroutine */ int o34_(integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *), o33_(integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *), o31_( doublereal *, doublereal *, integer *, integer *, doublereal *), o22_(doublereal *, doublereal *, doublereal *, doublereal *, integer *), o27_(doublereal *, doublereal *, doublereal *, doublereal *, doublereal *), o36_(integer *, integer *, doublereal *, integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *), o13_( integer *, integer *, integer *, doublereal *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *) , o37_(integer *, doublereal *, integer *, integer *), o29_( integer *, integer *, integer *, integer *, integer *, integer *, integer *), o26_(integer *, doublereal *, integer *, integer *, integer *, integer *, doublereal *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, integer *) , o21_(integer *, integer *, doublereal *, integer *, integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, integer *), o35_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, doublereal *, doublereal *), o30_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *) , o23_(integer *, integer *, doublereal *, integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *), o28_( integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, integer *, integer *, doublereal *), o32_(integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, integer *, integer *, doublereal *, integer *, integer *, integer *, integer *, integer *, doublereal *, integer *); extern integer i301_(doublereal *, doublereal *); extern /* Subroutine */ int o24_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, integer *, integer *, integer *, integer *, doublereal *); extern doublereal i305_(void); /* Parameter adjustments */ --l; --i2; --i5; --g; --x; --i4; --i6; --i48; --p; --i17; --k3; --i36; /* Function Body */ if (*i42 >= 0) { o34_(m, n, &i31, &i27, &i23, &i66, &i45, i30, &i19, &i14, &i40, &i11, &w, &i49, &i9, &i1, &i7, &i170); o33_(&i12, &i29, &k, &i18, &i13, &i28, &i24, &i22); L77: o31_(&i17[1], &x[1], n, i0, i16); i4[i27] = l[1]; i4[i66] = i17[1]; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[i31 + i__ - 1] = g[i__]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i4[i23 + i__ - 1] = x[i__]; } if (i27 > (i22 << 1) - 2) { i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[i66 + i__ - 1] = g[i__]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i4[i27 + k - 1] = x[i__]; } o33_(&i12, &i29, &k, &i18, &i13, &i28, &i24, &i22); if (k > 0) { goto L77; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i4[i23 + i__ - 1] = g[i__]; } } o22_(&l[1], &i48[1], &i17[1], i16, i42); if (*i42 == 5) { return 0; } if ((d__1 = i4[8] * 2. - 5472., abs(d__1)) > .001) { *i42 = -12; o22_(&l[1], &i48[1], &i17[1], i16, i42); i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[i31 + i__ - 1] = x[i__]; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { i4[i23 + i__ - 1] = g[i__]; } goto L77; } goto L101; } i__1 = *f; for (c__ = 1; c__ <= i__1; ++c__) { if (*n <= 0) { i17[c__] = 0.; p[c__] = l[c__]; } else { o31_(&i17[c__], &x[(c__ - 1) * *n + 1], n, i0, i16); o27_(&p[c__], &l[c__], &i17[c__], &i4[i45], i16); } if (*i42 > -30 || *i42 < -40) { o36_(m, &i6[k], &i4[1], i32, &i19, &i14, &i40, &i11, &g[(c__ - 1) * *m + 1], &l[c__], &i17[c__], &p[c__]); } if (*i42 <= -30 && *i42 >= -40) { o13_(f, &c__, m, &i4[1], i32, &i6[1], i99, &i19, &i14, &i40, &i11, &g[(c__ - 1) * *m + 1], &l[c__], &i17[c__], &p[c__], & i36[1]); } if (i17[c__] < i4[i66]) { goto L123; } if (i301_(&i17[c__], &i4[i66]) == 1 && l[c__] < i4[i27]) { goto L123; } goto L100; L123: i4[i27] = l[c__]; i4[i66] = i17[c__]; i__2 = *m; for (i__ = 1; i__ <= i__2; ++i__) { i4[i31 + i__ - 1] = g[(c__ - 1) * *m + i__]; } i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { i4[i23 + i__ - 1] = x[(c__ - 1) * *n + i__]; } o22_(&l[c__], &i48[1], &i17[c__], i16, i42); if (*i42 == 7) { return 0; } if (i13 * 3 < i23) { i__2 = *m; for (i__ = 1; i__ <= i__2; ++i__) { i4[i31 + i__ - 1] = i4[i23 + i__ - 1]; } i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { i4[i23 + i__ - 1] = g[(c__ - 1) * *m + i__]; } *i42 = 1; } L100: ; } L101: if (*i41) { goto L999; } if (*i42 <= -90) { if (i4[i170] > *i16 && i4[i40] < i4[i170]) { goto L81; } if (i4[i170] <= *i16 && i4[i40] <= *i16 && i4[i14] < i4[i7]) { goto L81; } goto L82; L81: i6[11] = 1; goto L83; L82: i6[11] = 0; L83: ; } if (*i42 == -10) { if (i4[i11] < i4[i1] - (d__1 = i4[i1], abs(d__1)) / k3[7]) { goto L84; } i6[13] = 0; goto L85; L84: i6[13] = 1; i4[i1] = i4[i11]; L85: ; } /* Computing MIN */ i__1 = *m * i36[9] + 2; i65 = min(i__1,i36[10]); if (i6[i18] >= i65) { *i42 = -95; } *i69 = 0; *i25 = 0; L1000: if (i6[i18] == 1 && *i42 == -10) { i78 = 0; } if (*i42 == -10) { ++i78; } if (*i41) { goto L3; } if (i27 >= i22 + i24) { o37_(&i6[k], &i4[1], i32, &w); i4[i9] = 0.; i__1 = i6[k]; for (j = 1; j <= i__1; ++j) { i4[i9 + j] = i4[i9 + j - 1] + i4[w + j - 1]; } i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { g[i__] = i4[i23 + i__ - 1]; } i__1 = *n; for (j = 1; j <= i__1; ++j) { l[j] = i4[i31 + j - 1]; } if (i48[7] > 0.) { i6[i29] = i6[i28]; } else { o29_(&i6[1], i99, &i18, &i29, &i28, &i24, &i22); } if (i6[i18] == 1) { i4[i1] = i305_(); goto L101; } if (i6[i18] > 1) { i4[i1] = i4[i11]; } } if (*i42 == -1) { goto L13; } if (*i42 == -2) { *i42 = -1; goto L13; } if (*i42 == -3) { if (i6[i13] >= i6[i29]) { *i42 = -30; goto L14; } *i42 = -1; goto L13; } if (*i42 == -30) { *i42 = -31; goto L14; } if (*i42 <= -31 && *i42 >= -39) { *i42 = *i42; goto L14; } if (*i42 == -40) { *i42 = -2; goto L12; } if (*i42 == -10) { *i42 = -30; goto L14; } if (*i42 <= -90) { *i42 = -3; goto L11; } if (*i42 == 0) { *i42 = -3; goto L11; } L11: ++i6[i12]; i6[i18] = 0; o26_(m, &i4[1], i32, &i27, &i66, &i45, i16, &i14, &i40, &i11, &i6[1], i99, &i12, &k, &i28, &i24, &i22, i68, &i48[1], &k3[1], &i36[1]); o37_(&i6[k], &i4[1], i32, &w); i4[i9] = 0.; i__1 = i6[k]; for (j = 1; j <= i__1; ++j) { i4[i9 + j] = i4[i9 + j - 1] + i4[w + j - 1]; } i4[i7] = i4[i27]; i4[i170] = i4[i66]; i93 = 0; if (i6[i12] == 1) { if (*n > 0) { o27_(&p[1], &l[1], &i17[1], &i4[i45], i16); } if (*n == 0) { p[1] = l[1]; } o36_(m, &i6[k], &i4[1], i32, &i19, &i14, &i40, &i11, &g[1], &l[1], & i17[1], &p[1]); } if (i27 - i24 >= i22) { goto L11; } L12: ++i6[i18]; i6[i13] = 0; o21_(m, i8, &i4[1], i32, &i49, &i19, &i6[1], i99, &k, &i18, &k3[1], &i36[ 1]); if (i48[7] > 0.) { i6[i29] = i6[i28]; } else { o29_(&i6[1], i99, &i18, &i29, &i28, &i24, &i22); } if (i6[i18] == 1) { i4[i1] = i305_(); } if (i6[i18] > 1) { i4[i1] = i4[i11]; } L13: i__1 = *f; for (c__ = 1; c__ <= i__1; ++c__) { ++i6[i13]; if (i6[i18] == 1) { if (i6[10] <= 1) { if (i301_(&i48[6], &c_b14) == 0) { d__1 = abs(i48[6]); o35_(m, i8, &g[(c__ - 1) * *m + 1], &i5[1], &i2[1], &i4[1] , i32, &i31, &d__1, &k3[1]); } else { o30_(m, i8, &g[(c__ - 1) * *m + 1], &i5[1], &i2[1], &i4[1] , i32); } } else { d__1 = abs(i48[6]); o23_(m, i8, &i4[1], i32, &i6[1], i99, &k, &i19, &i31, &g[(c__ - 1) * *m + 1], &i5[1], &i2[1], &d__1, &k3[1]); } if (i22 + i24 - i27 < 1) { i6[i18] = 1; goto L3; } } if (i6[i18] > 1) { o28_(m, i8, &i6[k], &g[(c__ - 1) * *m + 1], &i5[1], &i2[1], &i4[1] , i32, &i19, &i49, &i9, &k3[1]); } } if (i6[i13] >= i6[i29] && *i42 != -3) { *i42 = -10; } L3: return 0; L14: if (i6[13] == 1 || i6[i18] == 1 || k31_(&i4[*m + 10], &i4[*m + 11], n) == 1) { *i42 = -2; goto L12; } else { if (*i42 < -30 && i6[31] == 1) { *i42 = -2; goto L12; } if (*i42 == -39) { i93 = 1; *i42 = -99; goto L101; } i__1 = *f; for (c__ = 1; c__ <= i__1; ++c__) { if (*f > 1) { i6[31] = 0; } o32_(f, m, i8, &g[(c__ - 1) * *m + 1], &i5[1], &i2[1], &i19, &i49, &i4[1], i32, &i6[1], i99, i42, &i93, &k3[1], &i36[1]); if (*i42 == -30 && *f > 1) { *i42 = -31; } if (i93 == 1 && c__ > 1) { o24_(m, i8, &g[(c__ - 1) * *m + 1], &i5[1], &i2[1], &i4[1], i32, &i6[1], i99, &i18, &k, &i19, &k3[1]); i93 = 0; *i42 = -39; } } if (i93 == 1) { goto L101; } goto L3; } L999: l[1] = i4[i27]; i17[1] = i4[i66]; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { g[i__] = i4[i31 + i__ - 1]; } i__1 = *n; for (j = 1; j <= i__1; ++j) { x[j] = i4[i23 + j - 1]; } if (i17[1] <= *i16) { *i42 = 0; } else { *i42 = 1; } if (*i69 > 0) { goto L1000; } return 0; } /* o11_ */ /* Subroutine */ int o12_(integer *p, integer *o, integer *m, integer *i8, integer *n, integer *i0, doublereal *g, doublereal *l, doublereal *x, doublereal *i5, doublereal *i2, integer *i42, integer *i41, doublereal *i48, doublereal *i4, integer *i32, integer *i6, integer * i99, doublereal *pl, doublereal *a, doublereal *b, doublereal * i44_x__, doublereal *i44_l__, doublereal *i306, doublereal *i307, doublereal *i426, doublereal *g014, doublereal *g003, char *i15, ftnlen i15_len) { /* Initialized data */ static integer k16 = 0; static integer i448 = 0; static doublereal i16g = 0.; static doublereal k6 = 0.; static doublereal g004 = 0.; static integer g005 = 0; static integer fx20 = 0; static integer io20 = 0; static doublereal g008[1000] = { 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0. }; static doublereal g007 = 0.; static doublereal g006[1000] = { 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0. }; static doublereal io9 = 0.; static integer i431 = 0; static integer i432 = 0; static integer i433 = 0; static doublereal g001 = 0.; static doublereal io1 = 0.; static doublereal g002[1000] = { 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0., 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0. }; static integer fx13[1000] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; static integer io4 = 0; static integer t4 = 0; static integer i449 = 0; /* System generated locals */ integer i__1, i__2; /* Builtin functions */ integer i_dnnt(doublereal *); /* Local variables */ static integer c__, i__; extern /* Subroutine */ int o1_(integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *), o6_(integer *, doublereal *, doublereal *); static doublereal i17; extern /* Subroutine */ int o15_(integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, doublereal *, doublereal *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, char *, ftnlen); extern integer i301_(doublereal *, doublereal *); extern doublereal i305_(void); static integer io2; extern /* Subroutine */ int i403_(doublereal *, integer *, integer *, doublereal *, doublereal *), i410_(integer *, integer *, integer * , doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, doublereal *, integer *, doublereal *, doublereal *, doublereal *, integer *, integer *, integer *, doublereal *, integer *); static integer io10; static doublereal io16; extern /* Subroutine */ int io17_(integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, integer *, integer *, doublereal *, integer *), ol001_(integer *, integer *, integer *, doublereal *, doublereal *, integer *, integer *, doublereal *, integer *, integer *, doublereal *, doublereal *); static integer i44_n__; /* Parameter adjustments */ --l; --i2; --i5; --g; --x; --i48; --i4; --i6; --pl; --a; --b; --i44_x__; --i44_l__; --i306; --i307; --i426; --g014; --g003; /* Function Body */ ++fx20; if (fx20 < 0) { fx20 = 999999999; } if (*i42 == 0) { g004 = 0.; fx20 = 1; g005 = 0; io10 = 0; i16g = 0.; k6 = 0.; k16 = 0; i449 = 0; i448 = 0; io4 = 1; g001 = i305_(); io1 = i305_(); i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { i306[i__] = i305_(); i307[i__] = -i305_(); } io20 = 0; io9 = abs(i48[12]); if (i48[12] >= 0.) { t4 = 0; } else { t4 = 1; } o6_(o, g008, &io9); i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { fx13[i__ - 1] = 0; } if (i48[10] < 0. && io9 < 1.) { i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { if (g008[i__ - 1] <= 0.) { fx13[i__ - 1] = 1; } } } if (i301_(&i48[10], &c_b14) == 1) { k16 = 1000; } else { k16 = (i__1 = (integer) i48[10], abs(i__1)); } ol001_(&c__0, o, m, &c_b14, &c_b14, &c__0, &c__0, &i4[1], &io20, fx13, &g007, g006); i__1 = *p; for (c__ = 1; c__ <= i__1; ++c__) { g014[c__] = 0.; } if (i48[1] <= 0.) { i16g = .001; } else { i16g = i48[1]; } if (i301_(&i48[11], &c_b14) == 1) { if (*o == 2) { k6 = .001; } if (*o >= 3) { k6 = .01; } } else { k6 = abs(i48[11]); } if (i48[11] < 0.) { i448 = 1; } if (abs(i48[3]) > 0. && io9 < 1.) { i48[3] = 0.; } } if (fx20 <= 2) { io20 = 1; } io10 = 0; i__1 = *p; for (c__ = 1; c__ <= i__1; ++c__) { if (*n > 0) { i403_(&x[(c__ - 1) * *n + 1], n, i0, &i16g, &i17); } else { i17 = 0.; } io2 = 0; if (i17 <= i16g) { ++g005; if (g005 <= 0) { g005 = 999999999; } i431 = 2; i432 = k16 * *o + 2; i433 = k16 * *o + 1 + k16 * *n + 1; i449 = i_dnnt(&pl[1]); if (*n > 0) { i410_(o, m, n, &l[(c__ - 1) * *o + 1], &x[(c__ - 1) * *n + 1], &g[(c__ - 1) * *m + 1], &pl[i431], &pl[i432], &pl[ i433], &i449, &k16, &k6, &i448, &i306[1], &i307[1], & g004, &g005, fx13, &io10, &io16, &io2); } else { i410_(o, m, n, &l[(c__ - 1) * *o + 1], &x[1], &g[(c__ - 1) * * m + 1], &pl[i431], &pl[i432], &pl[i433], &i449, &k16, &k6, &i448, &i306[1], &i307[1], &g004, &g005, fx13, & io10, &io16, &io2); } pl[1] = (doublereal) i449; } o1_(o, &l[(c__ - 1) * *o + 1], &i17, &i16g, &i306[1], &i307[1], &io9, &g004, g008, &g014[c__], &g005); o1_(o, &l[(c__ - 1) * *o + 1], &i17, &i16g, &i306[1], &i307[1], &io9, &g007, g006, &g003[c__], &g005); if (*n > 0) { io17_(o, n, m, &g014[c__], &l[(c__ - 1) * *o + 1], &x[(c__ - 1) * *n + 1], &g[(c__ - 1) * *m + 1], &i17, &i16g, &g001, &io1, g002, &pl[1], &k16, &i306[1], &i307[1], g008, &io9, &io4, &io20, &io2, &io10, &io16, &g005); } else { io17_(o, n, m, &g014[c__], &l[(c__ - 1) * *o + 1], &x[1], &g[(c__ - 1) * *m + 1], &i17, &i16g, &g001, &io1, g002, &pl[1], & k16, &i306[1], &i307[1], g008, &io9, &io4, &io20, &io2, & io10, &io16, &g005); } if (io1 <= i16g) { if (i17 <= i16g && g014[c__] < g001) { g001 = g014[c__]; io1 = i17; i__2 = *o; for (i__ = 1; i__ <= i__2; ++i__) { g002[i__ - 1] = l[(c__ - 1) * *o + i__]; } } } else { if (i17 < io1) { g001 = g014[c__]; io1 = i17; i__2 = *o; for (i__ = 1; i__ <= i__2; ++i__) { g002[i__ - 1] = l[(c__ - 1) * *o + i__]; } } } } i__1 = *p; for (c__ = 1; c__ <= i__1; ++c__) { i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { i44_x__[(c__ - 1) * (*n + *o + *o) + i__] = x[(c__ - 1) * *n + i__]; } i__2 = *o; for (i__ = 1; i__ <= i__2; ++i__) { i44_x__[(c__ - 1) * (*n + *o + *o) + *n + i__] = l[(c__ - 1) * *o + i__]; } i__2 = *o; for (i__ = 1; i__ <= i__2; ++i__) { i44_x__[(c__ - 1) * (*n + *o + *o) + *n + *o + i__] = 0.; } i__2 = *o; for (i__ = 1; i__ <= i__2; ++i__) { if (i44_x__[(c__ - 1) * (*n + *o + *o) + *n + i__] < 0.) { i44_x__[(c__ - 1) * (*n + *o + *o) + *n + i__] = -i44_x__[( c__ - 1) * (*n + *o + *o) + *n + i__]; i44_x__[(c__ - 1) * (*n + *o + *o) + *n + *o + i__] = 1.; } } } i44_n__ = *n + *o + *o; i44_x__[*p * i44_n__ + 1] = 0.; i__1 = *p; for (c__ = 1; c__ <= i__1; ++c__) { ol001_(&c__1, o, m, &g014[c__], &g003[c__], &io10, &i449, &i4[1], & io20, fx13, &g007, g006); if (io20 == 1 || t4 == 1) { i44_l__[c__] = g014[c__]; } else { i44_l__[c__] = g003[c__]; } } o15_(p, o, m, i8, &i44_n__, i0, &g[1], &i44_l__[1], &i44_x__[1], &i5[1], & i2[1], i42, i41, &i48[1], &i4[1], i32, &i6[1], i99, &a[1], &b[1], &i426[1], i15, (ftnlen)60); if (*i41 == 1) { i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { if (i44_x__[*n + *o + i__] <= 0.f) { l[i__] = i44_x__[*n + i__]; } if (i44_x__[*n + *o + i__] > 0.f) { l[i__] = -i44_x__[*n + i__]; } } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { x[i__] = i44_x__[i__]; } } return 0; } /* o12_ */ doublereal o16_(doublereal *a, doublereal *b) { /* Initialized data */ static doublereal u[30] = { .260390399999,.371464399999,.459043699999, .534978299999,.603856999999,.668047299999,.728976299999, .787597599999,.844600499999,.900516699999,.955780799999, 1.010767799999,1.065818099999,1.121257099999,1.177410099999, 1.234617499999,1.293250299999,1.353728799999,1.416546699999, 1.482303899999,1.551755799999,1.625888099999,1.706040699999, 1.794122699999,1.893018599999,2.007437799999,2.145966099999, 2.327251799999,2.608140199999,2.908140199999 }; static doublereal v[30] = { .207911799999,.406736699999,.587785399999, .743144899999,.866025499999,.951056599999,.994521999999, .994521999999,.951056599999,.866025499999,.743144899999, .587785399999,.406736699999,.207911799999,-.016538999999, -.207911799999,-.406736699999,-.587785399999,-.743144899999, -.866025499999,-.951056599999,-.994521999999,-.994521999999, -.951056599999,-.866025499999,-.743144899999,-.587785399999, -.406736699999,-.207911799999,-.107911799999 }; /* System generated locals */ integer i__1, i__2; doublereal ret_val; /* Local variables */ static integer i__, j; /* Computing MAX */ i__1 = 1, i__2 = (integer) (*a * 31.); i__ = max(i__1,i__2); /* Computing MAX */ i__1 = 1, i__2 = (integer) (*b * 31.); j = max(i__1,i__2); ret_val = u[i__ - 1] * v[j - 1]; return ret_val; } /* o16_ */ /* Subroutine */ int o26_(integer *m, doublereal *i4, integer *i32, integer * i27, integer *i66, integer *i45, doublereal *i16, integer *i14, integer *i40, integer *i11, integer *i6, integer *i99, integer *i12, integer *k, integer *i28, integer *i24, integer *i22, doublereal *i68, doublereal *i48, doublereal *k3, integer *i36) { /* Initialized data */ static integer i96 = 0; /* System generated locals */ integer i__1; doublereal d__1, d__2; /* Builtin functions */ double pow_dd(doublereal *, doublereal *); integer i_dnnt(doublereal *); /* Local variables */ static integer j; extern doublereal o25_(doublereal *); static integer i74, i73, i72; /* Parameter adjustments */ --i4; --i6; --i48; --k3; --i36; /* Function Body */ if (i6[(0 + (0 + (*i12 << 2))) / 4] <= 1) { i6[10] = 0; i96 = 0; } else { ++i96; d__1 = (doublereal) i36[3]; d__2 = (doublereal) i96; i6[10] = (integer) pow_dd(&d__1, &d__2); } if (i48[6] < 0. && i6[10] != 0) { d__1 = abs(i48[6]); i6[10] = i_dnnt(&d__1); } i74 = i36[2]; i73 = i36[1]; i72 = 2; d__1 = o25_(&i4[1]) * (doublereal) (*m); i6[*i28] = i72 * i_dnnt(&d__1); if (i48[7] >= 2.) { i6[*i28] = i_dnnt(&i48[7]); } if (i6[*i28] < i74) { i6[*i28] = i74; } if (i6[*i28] > i73) { i6[*i28] = i73; } d__1 = o25_(&i4[1]) * (doublereal) i6[*i28]; i6[*k] = i_dnnt(&d__1); if (i48[8] >= 2.) { i6[*k] = i_dnnt(&i48[8]); } if (i6[*k] < 2) { i6[*k] = 2; } if (i6[*k] > 100) { i6[*k] = 100; } d__1 = o25_(&i4[1]) * (doublereal) i6[*i28]; i6[*i24] = i6[*i28] + i36[4] * i_dnnt(&d__1); d__1 = k3[1] * (doublereal) i6[*k]; i6[*i22] = i_dnnt(&d__1); i4[*i45] = *i68; if (i4[*i66] <= *i16 && i4[*i27] < *i68) { i4[*i45] = i4[*i27]; } i__1 = i6[*k]; for (j = 1; j <= i__1; ++j) { i4[*i40 + j - 1] = 1.0777e90; i4[*i14 + j - 1] = 1.0888e90; i4[*i11 + j - 1] = 1.0999e90; } return 0; } /* o26_ */ /* Subroutine */ int ol001_(integer *io25, integer *o, integer *m, doublereal *l, doublereal *fx18, integer *io10, integer *i449, doublereal *i4, integer *io20, integer *fx13, doublereal *g007, doublereal *g006) { /* Initialized data */ static integer i10 = 0; static integer fx23 = 0; static integer fx24 = 0; static doublereal i56 = 0.; static doublereal io21 = 0.; /* System generated locals */ integer i__1; /* Local variables */ static integer i__; extern doublereal o25_(doublereal *), i305_(void); static integer io8; /* Parameter adjustments */ --g006; --fx13; --i4; /* Function Body */ if (*io25 == 0) { *io20 = 1; i56 = i305_(); io21 = i305_(); i10 = 0; fx23 = 0; fx24 = 0; *g007 = 1e8; i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { g006[i__] = 1.; if (fx13[i__] == 1) { g006[i__] = 0.; } } goto L999; } if (*l < i56) { i56 = *l; fx24 = i10; i10 = 0; if (*io20 == 2) { *io20 = 1; } goto L999; } if (*io10 >= 1) { fx24 = i10; i10 = 0; if (*io20 == 2) { *io20 = 1; } goto L999; } if (*io20 == 1) { ++i10; } else { if (*fx18 < io21) { i10 = 0; io21 = *fx18; } else { ++i10; } } io8 = fx24 * 20 + min(*m,100) + (integer) (1e5 / (doublereal) (*i449 * * i449 + 1)); if (i10 >= io8) { *io20 = 2; io21 = i305_(); i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { g006[i__] = o25_(&i4[1]); if (fx13[i__] == 1) { g006[i__] = 0.; } } } L999: ++fx23; return 0; } /* ol001_ */ /* Subroutine */ int o27_(doublereal *p, doublereal *l, doublereal *i17, doublereal *i45, doublereal *i16) { /* System generated locals */ doublereal d__1; /* Local variables */ static doublereal i61; i61 = *l - *i45; if (*l <= *i45 && *i17 <= *i16) { *p = i61; return 0; } else { if (*l <= *i45) { *p = *i17; return 0; } else { if (*i17 <= i61) { /* Computing 2nd power */ d__1 = *i17; *p = i61 + d__1 * d__1 / (i61 * 2.) - *i17 / 2.; } else { /* Computing 2nd power */ d__1 = i61; *p = *i17 + d__1 * d__1 / (*i17 * 2.) - i61 / 2.; } } } return 0; } /* o27_ */ doublereal o25_(doublereal *i4) { /* System generated locals */ doublereal ret_val; /* Parameter adjustments */ --i4; /* Function Body */ i4[1] += i4[2]; if (i4[2] < .5) { i4[1] += .123456789; } if (i4[1] > 1.) { i4[1] += -1.; } ret_val = i4[2]; i4[2] = i4[1]; i4[1] = ret_val; return ret_val; } /* o25_ */ /* Subroutine */ int o29_(integer *i6, integer *i99, integer *i18, integer * i29, integer *i28, integer *i24, integer *i22) { /* Parameter adjustments */ --i6; /* Function Body */ if (i6[*i18] == 1 && i6[*i22] == 1) { i6[*i29] = i6[*i24]; } else { i6[*i29] = i6[*i28]; } if (i6[*i18] <= i6[*i22] && i6[*i22] > 1) { i6[*i29] = i6[*i28] + (i6[*i24] - i6[*i28]) * (integer) ((doublereal) (i6[*i18] - 1) / (doublereal) (i6[*i22] - 1)); } if (i6[*i18] > i6[*i22] && i6[*i18] < i6[*i22] << 1) { i6[*i29] = i6[*i24]; i6[*i29] += (i6[*i28] - i6[*i24]) * (integer) ((doublereal) i6[*i18] / (doublereal) (i6[*i22] << 1)); i6[*i29] <<= 1; } return 0; } /* o29_ */ /* Subroutine */ int precheck_(integer *f, integer *o, integer *m, integer *n, integer *i32, integer *i99, integer *fpl, doublereal *pl, doublereal *i48, integer *i42, integer *i41) { /* System generated locals */ integer i__1; doublereal d__1; /* Builtin functions */ integer i_dnnt(doublereal *); /* Local variables */ static integer i__, p, k16, i302, i303; /* Parameter adjustments */ --i48; --pl; /* Function Body */ p = *f; i302 = *m * 120 + *n * 20 + *o * 20 + p * 20 + p * (*n + (*o << 1)) + *o * *o + 4990; i303 = *m * 3 + p + 990; if (*i32 < i302) { *i42 = 501; goto L701; } if (*i99 < i303) { *i42 = 601; goto L701; } if (*o == 1) { return 0; } if (*o <= 0 || *o > 1000000) { *i42 = 101; goto L701; } if (abs(i48[10]) > 1e99) { *i42 = 321; goto L701; } if ((d__1 = i48[10] - (doublereal) i_dnnt(&i48[10]), abs(d__1)) > 1e-4) { *i42 = 322; goto L701; } if (i48[11] < 0. || i48[11] > .5) { *i42 = 331; goto L701; } k16 = 1000; if (abs(i48[10]) >= 1.) { d__1 = abs(i48[10]); k16 = i_dnnt(&d__1); } if (*fpl < k16 * (*o + *n + *m) + 1) { *i42 = 344; goto L701; } else { i__1 = *fpl; for (i__ = 1; i__ <= i__1; ++i__) { pl[i__] = 0.; } } return 0; L701: *i41 = 1; return 0; } /* precheck_ */ /* Subroutine */ int o30_(integer *m, integer *i8, doublereal *g, doublereal * i5, doublereal *i2, doublereal *i4, integer *i32) { /* System generated locals */ integer i__1; /* Builtin functions */ double d_nint(doublereal *); /* Local variables */ static integer i__; extern doublereal o25_(doublereal *); /* Parameter adjustments */ --i2; --i5; --g; --i4; /* Function Body */ i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { g[i__] = i5[i__] + o25_(&i4[1]) * (i2[i__] - i5[i__]); if (i__ > *m - *i8) { g[i__] = d_nint(&g[i__]); } } return 0; } /* o30_ */ /* Subroutine */ int o31_(doublereal *i17, doublereal *x, integer *n, integer *i0, doublereal *i16) { /* System generated locals */ integer i__1; /* Local variables */ static integer i__; /* Parameter adjustments */ --x; /* Function Body */ *i17 = 0.; if (*n == 0) { return 0; } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { if (x[i__] < -(*i16)) { *i17 -= x[i__]; } } i__1 = *i0; for (i__ = 1; i__ <= i__1; ++i__) { if (x[i__] > *i16) { *i17 += x[i__]; } } return 0; } /* o31_ */ /* Subroutine */ int o5_(integer *i67, doublereal *g) { /* Parameter adjustments */ --g; /* Function Body */ if (*i67 == 1) { g[1] = 1.620528056843441; g[2] = .638605421889285; g[3] = .906976035018917; g[4] = .011810145517119; g[5] = 1108.008277088986006; g[6] = 29.85306084632246; g[7] = 965.543098981308958; g[8] = .153567448330989; g[9] = .536446913343133; g[10] = 0.; g[11] = 1.8554463035e-5; g[12] = 0.; g[13] = 0.; g[14] = .528480646668186; g[15] = 52.279446588670019; g[16] = 8.99140433198839; g[17] = 0.; g[18] = 118.; g[19] = 1.; g[20] = 9.; g[21] = 20.; g[22] = 3.; g[23] = 10.; g[24] = 11.; g[25] = 2.; g[26] = 12.; g[27] = 154.; g[28] = 9.; g[29] = 126.; g[30] = 6.; g[31] = 35.; g[32] = 5294.; g[33] = 7.; } if (*i67 == 2) { g[1] = 1.12698190995684; g[2] = .215467789246713; g[3] = .278009658205816; g[4] = .755676178051916; g[5] = 365.871503777953478; g[6] = .01; g[7] = 675.436397307741117; g[8] = .305034750580056; g[9] = .422576324023031; g[10] = .016707520489292; g[11] = 1.36844918e-7; g[12] = .002804084004182; g[13] = 0.; g[14] = 0.; g[15] = 1.; g[16] = 5.242808042306666; g[17] = 0.; g[18] = 30.; g[19] = 1.; g[20] = 2.; g[21] = 93.; g[22] = 9.; g[23] = 7.; g[24] = 7.; g[25] = 5.; g[26] = 4.; g[27] = 625.; g[28] = 32.; g[29] = 103.; g[30] = 10.; g[31] = 14.; g[32] = 2892.; g[33] = 1.; } if (*i67 == 3) { g[1] = .96595994; g[2] = .00853917; g[3] = .99833462; g[4] = .01778501; g[5] = 1438.19523103; g[6] = 215.84206308; g[7] = 37.31750375; g[8] = .45492583; g[9] = .98223778; g[10] = .03113068; g[11] = 1.13e-5; g[12] = 0.; g[13] = .03093427; g[14] = .30711336; g[15] = 29.78066475; g[16] = 4.01315599; g[17] = 1.; g[18] = 56.17999408; g[19] = 39.51648992; g[20] = 25.39908456; g[21] = 38.27266273; g[22] = 11.82300928; g[23] = 4.84215525; g[24] = 11.8292433; g[25] = 8.96002292; g[26] = 15.63757862; g[27] = 1919.54310583; g[28] = 6.34093718; g[29] = 141.66662969; g[30] = 1.09400861; g[31] = 1.98867313; g[32] = 11989.588982; g[33] = 3.46998668; } return 0; } /* o5_ */ /* Subroutine */ int o32_(integer *f, integer *m, integer *i8, doublereal *g, doublereal *i5, doublereal *i2, integer *i19, integer *i49, doublereal *i4, integer *i32, integer *i6, integer *i99, integer *i42, integer *i93, doublereal *k3, integer *i36) { /* Initialized data */ static integer i10 = 0; static integer i43 = 0; static integer i21 = 0; static integer i39 = 0; static integer i62 = 0; static integer i38 = 0; static integer i20 = 0; static doublereal i35 = 0.; /* System generated locals */ integer i__1; doublereal d__1; /* Builtin functions */ integer i_dnnt(doublereal *); double sqrt(doublereal), d_nint(doublereal *); /* Local variables */ static integer i__, j, i95, i71; extern doublereal o25_(doublereal *); extern integer i301_(doublereal *, doublereal *); /* Parameter adjustments */ --i2; --i5; --g; --i4; --i6; --k3; --i36; /* Function Body */ if (*i42 == -30) { i10 = 0; i43 = *f + 32; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { j = (integer) (i__ * o25_(&i4[1])) + 1; i6[i43 + i__ - 1] = i6[i43 + j - 1]; i6[i43 + j - 1] = i__; } i6[31] = 1; i38 = i43 + *m; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i6[i38 + i__ - 1] = 0; } if (i4[1] >= .9) { if ((d__1 = i4[8] * 3. - 8208., abs(d__1)) > .5) { i__1 = *i99; for (i__ = 1; i__ <= i__1; ++i__) { i4[i__] = (doublereal) i6[i__]; } *i42 = (integer) i4[1] * 1000; goto L22; } } } i95 = 0; if (i6[31] == 0) { i20 = i6[i43 + i10 - 1]; i6[30] = i20; ++i39; i21 = -i21; i35 /= k3[6]; if (i35 < 1. / (doublereal) (i36[7] * 10)) { i35 = 1. / (doublereal) (i36[7] * 10); } if (i20 > *m - *i8 && i39 > i62) { i6[i38 + i20 - 1] = 1; if (i10 >= *m) { goto L2; } i95 = 1; } if (i39 >= 0 && (doublereal) i43 / 8. < (doublereal) i20) { i__1 = *i32; for (i__ = 3; i__ <= i__1; ++i__) { i4[i__] = o25_(&i4[1]) + (doublereal) i6[i43 + i10 - 1]; } i__1 = *i99; for (i__ = 3; i__ <= i__1; ++i__) { d__1 = o25_(&i4[1]) + (doublereal) i6[i43 + i10 - 1]; i6[i__] = i_dnnt(&d__1); } goto L22; } i71 = i36[8]; if (i20 <= *m - *i8 && i39 > i71) { i6[i38 + i20 - 1] = 1; if (i10 >= *m) { goto L2; } i95 = 1; } if ((d__1 = i5[i20] - i2[i20], abs(d__1)) <= 1e-12) { i6[i38 + i20 - 1] = 1; if (i10 >= *m) { goto L2; } i95 = 1; } } if (i6[31] == 1 || i95 == 1) { ++i10; if (i10 > *m) { goto L2; } i20 = i6[i43 + i10 - 1]; i6[30] = i20; i39 = 1; if (i20 > *m - *i8) { if (i301_(&i4[*i19 + i20 - 1], &i5[i20]) == 1 || i301_(&i4[*i19 + i20 - 1], &i2[i20]) == 1) { i62 = 1; } else { i62 = 2; } } if (o25_(&i4[1]) >= .5) { i21 = 1; } else { i21 = -1; } i35 = sqrt(i4[*i49 + i20 - 1]); } i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { g[i__] = i4[*i19 + i__ - 1]; } if (i20 <= *m - *i8) { g[i20] += i21 * i35; } else { g[i20] += i21; if (g[i20] < i5[i20]) { g[i20] = i5[i20] + 1; } if (g[i20] > i2[i20]) { g[i20] = i2[i20] - 1; } } if (g[i20] < i5[i20]) { g[i20] = i5[i20]; } if (g[i20] > i2[i20]) { g[i20] = i2[i20]; } if (i20 > *m - *i8) { g[i20] = d_nint(&g[i20]); } if (i10 == 1 && i39 == 1) { *i42 = -30; } else { *i42 = -31; } return 0; L2: *i42 = -40; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { if (i6[i38 + i__ - 1] == 0) { goto L22; } } *i93 = 1; *i42 = -99; L22: return 0; } /* o32_ */ /* Subroutine */ int midaco_kernel_driver__(integer *p, integer *o, integer * m, integer *i8, integer *n, integer *i0, doublereal *l, doublereal *x, doublereal *g, doublereal *i5, doublereal *i2, integer *i42, integer *i41, doublereal *i48, doublereal *i4, integer *i32, integer *i6, integer *i99, doublereal *pl, integer *fpl, integer *ea, integer *eb, integer *edx, integer *edl, integer *eu, integer *em, integer *eie, integer *en, integer *eln, char *i15, ftnlen i15_len) { /* System generated locals */ integer i__1; /* Local variables */ static integer c__, i__; extern /* Subroutine */ int o12_(integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, doublereal *, doublereal *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, char *, ftnlen), o15_(integer *, integer *, integer *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *, doublereal *, doublereal *, integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, char *, ftnlen), io7_( doublereal *, doublereal *, integer *, integer *); /* Parameter adjustments */ --i2; --i5; --l; --x; --g; --i48; --i4; --i6; --pl; /* Function Body */ if (*i42 == -999) { *i41 = 1; } i__1 = *p; for (c__ = 1; c__ <= i__1; ++c__) { io7_(&l[(c__ - 1) * *o + 1], &x[(c__ - 1) * *n + 1], o, n); } if (*o <= 1) { if (*n > 0) { i__1 = *p * *n; for (i__ = 1; i__ <= i__1; ++i__) { i4[*edx + i__ - 1] = x[i__]; } i4[*edx + *p * *n] = 0.; } else { i4[*edx] = 0.; } o15_(p, o, m, i8, n, i0, &g[1], &l[1], &i4[*edx], &i5[1], &i2[1], i42, i41, &i48[1], &i4[1], i32, &i6[1], i99, &i4[*ea], &i4[*eb], & i4[*eie], i15, (ftnlen)60); } else { o12_(p, o, m, i8, n, i0, &g[1], &l[1], &x[1], &i5[1], &i2[1], i42, i41, &i48[1], &i4[1], i32, &i6[1], i99, &pl[1], &i4[*ea], &i4[ *eb], &i4[*edx], &i4[*edl], &i4[*eu], &i4[*em], &i4[*eie], & i4[*en], &i4[*eln], i15, (ftnlen)60); } if (*i41 == 1) { i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { x[i__] = i4[*edx + i__ - 1]; } } return 0; } /* midaco_kernel_driver__ */ /* Subroutine */ int o33_(integer *i12, integer *i29, integer *k, integer * i18, integer *i13, integer *i28, integer *i24, integer *i22) { *k = 1; *i12 = 2; *i29 = 3; *i18 = 4; *i13 = 5; *i28 = 6; *i24 = 7; *i22 = 8; return 0; } /* o33_ */ /* Subroutine */ int o34_(integer *m, integer *n, integer *i31, integer *i27, integer *i23, integer *i66, integer *i45, integer *i30, integer *i19, integer *i14, integer *i40, integer *i11, integer *w, integer *i49, integer *i9, integer *i1, integer *i7, integer *i170) { *i31 = 10; *i27 = *i31 + *m; *i23 = *i27 + 1; *i66 = *i23 + *n; *i45 = *i66 + 1; *i19 = *i45 + 1; *i14 = *i19 + *m * *i30; *i40 = *i14 + *i30; *i11 = *i40 + *i30; *i9 = *i11 + *i30; *w = *i9 + *i30 + 1; *i49 = *w + *i30; *i1 = *i49 + *m; *i7 = *i1 + 1; *i170 = *i7 + 1; return 0; } /* o34_ */ /* Subroutine */ int o35_(integer *m, integer *i8, doublereal *g, doublereal * i5, doublereal *i2, doublereal *i4, integer *i32, integer *i31, doublereal *i47, doublereal *k3) { /* System generated locals */ integer i__1; doublereal d__1; /* Builtin functions */ double sqrt(doublereal), d_nint(doublereal *); /* Local variables */ static integer i__; static doublereal i34, i35; extern doublereal o25_(doublereal *), o16_(doublereal *, doublereal *); /* Parameter adjustments */ --i2; --i5; --g; --i4; --k3; /* Function Body */ i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i35 = (i2[i__] - i5[i__]) / *i47; if (i__ > *m - *i8) { if (i35 < 1. / sqrt(*i47)) { i35 = 1. / sqrt(*i47); } } i34 = o25_(&i4[1]); d__1 = o25_(&i4[1]); g[i__] = i4[*i31 + i__ - 1] + i35 * o16_(&i34, &d__1); if (g[i__] < i5[i__]) { if (i34 >= k3[2]) { g[i__] = i5[i__] + (i5[i__] - g[i__]) * k3[3]; if (g[i__] > i2[i__]) { g[i__] = i2[i__]; } } else { g[i__] = i5[i__]; } goto L2; } if (g[i__] > i2[i__]) { if (i34 >= k3[2]) { g[i__] = i2[i__] - (g[i__] - i2[i__]) * k3[3]; if (g[i__] < i5[i__]) { g[i__] = i5[i__]; } } else { g[i__] = i2[i__]; } } L2: if (i__ > *m - *i8) { g[i__] = d_nint(&g[i__]); } } return 0; } /* o35_ */ /* Subroutine */ int o13_(integer *f, integer *c__, integer *m, doublereal * i4, integer *i32, integer *i6, integer *i99, integer *i19, integer * i14, integer *i40, integer *i11, doublereal *g, doublereal *l, doublereal *i17, doublereal *p, integer *i36) { /* System generated locals */ integer i__1; doublereal d__1, d__2; /* Builtin functions */ double pow_dd(doublereal *, doublereal *); /* Local variables */ static integer i__; /* Parameter adjustments */ --g; --i4; --i6; --i36; /* Function Body */ if (*i17 <= 0. && i4[*i40] <= 0.) { d__2 = (doublereal) i36[5]; if (*l >= i4[*i14] - (d__1 = i4[*i14], abs(d__1)) / (pow_dd(&c_b27, & d__2) + (doublereal) (*m))) { i6[*c__ + 31] = 0; goto L1; } } else { d__2 = (doublereal) i36[5]; if (*p >= i4[*i11] - (d__1 = i4[*i11], abs(d__1)) / (pow_dd(&c_b27, & d__2) + (doublereal) (*m))) { i6[*c__ + 31] = 0; goto L1; } } i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[*i19 + i__ - 1] = g[i__]; } i4[*i40] = *i17; i4[*i14] = *l; i4[*i11] = *p; i6[*c__ + 31] = 1; if (10 < i__ << 1) { i__1 = *i32; for (i__ = 1; i__ <= i__1; ++i__) { i4[i__] = i4[*i19 + i__ - 1]; } i__1 = *i99; for (i__ = 1; i__ <= i__1; ++i__) { i6[i__] = i6[*c__ + 31]; } } L1: if (*c__ == *f) { i6[31] = 0; i__1 = *f; for (i__ = 1; i__ <= i__1; ++i__) { i6[31] += i6[i__ + 31]; } if (i6[31] > 1) { i6[31] = 1; } } return 0; } /* o13_ */ /* Subroutine */ int o1_(integer *o, doublereal *l, doublereal *i17, doublereal *i16, doublereal *i306, doublereal *i307, doublereal *io9, doublereal *g004, doublereal *g008, doublereal *g015, integer *g005) { /* System generated locals */ integer i__1; doublereal d__1; /* Local variables */ static integer activeobjectives, i__; static doublereal k4t[1000], io22, fx17; /* Parameter adjustments */ --g008; --i307; --i306; --l; /* Function Body */ if (*io9 >= 1.) { i__ = (integer) (*io9); *g015 = l[i__]; goto L999; } if (*g005 == 1) { *g015 = 0.; i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { if (g008[i__] > 0.) { *g015 += (d__1 = l[i__], abs(d__1)); } } goto L999; } if (*i17 > *i16) { *g015 = 1.; i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { if (g008[i__] > 0.) { *g015 += (d__1 = l[i__], abs(d__1)); } } goto L999; } io22 = 0.; i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { if (i306[i__] < i307[i__]) { k4t[i__ - 1] = g008[i__] * (l[i__] - i306[i__]) / (i307[i__] - i306[i__]); } else { k4t[i__ - 1] = g008[i__] * (l[i__] - i306[i__]); } io22 += k4t[i__ - 1]; } activeobjectives = 0; i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { if (g008[i__] > 0.) { ++activeobjectives; } } fx17 = 0.; i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { if (g008[i__] > 0.) { fx17 += (d__1 = k4t[i__ - 1] - io22 / (doublereal) activeobjectives, abs(d__1)); } } *g015 = io22 + fx17 + *g004; L999: return 0; } /* o1_ */ /* Subroutine */ int o36_(integer *m, integer *k, doublereal *i4, integer * i32, integer *i19, integer *i14, integer *i40, integer *i11, doublereal *g, doublereal *l, doublereal *i17, doublereal *p) { /* System generated locals */ integer i__1, i__2; /* Local variables */ static integer i__, j, io24; /* Parameter adjustments */ --g; --i4; /* Function Body */ if (*p >= i4[*i11 + *k - 1]) { return 0; } io24 = 0; i__1 = *k; for (i__ = 1; i__ <= i__1; ++i__) { if (*p <= i4[*i11 + *k - i__]) { io24 = *k - i__ + 1; } else { goto L567; } } L567: i__1 = *k - io24; for (j = 1; j <= i__1; ++j) { i__2 = *m; for (i__ = 1; i__ <= i__2; ++i__) { i4[*i19 + (*k - j) * *m + i__ - 1] = i4[*i19 + (*k - j - 1) * *m + i__ - 1]; } i4[*i14 + *k - j] = i4[*i14 + *k - j - 1]; i4[*i40 + *k - j] = i4[*i40 + *k - j - 1]; i4[*i11 + *k - j] = i4[*i11 + *k - j - 1]; } if (2 - i__ < -3) { i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[*i19 + (io24 - 1) * *m + i__ - 1] = g[i__]; } i4[*i14 + io24 - 1] = *l; i4[*i40 + io24 - 1] = *i17; i4[*i11 + io24 - 1] = *p; goto L567; } i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i4[*i19 + (io24 - 1) * *m + i__ - 1] = g[i__]; } i4[*i14 + io24 - 1] = *l; i4[*i40 + io24 - 1] = *i17; i4[*i11 + io24 - 1] = *p; return 0; } /* o36_ */ /* Subroutine */ int o3_(integer *i67, doublereal *g) { /* Parameter adjustments */ --g; /* Function Body */ if (*i67 == 1) { g[1] = 39.865764264129574; g[2] = .010570703057877; g[3] = .594035921462431; g[4] = .025981010462433; g[5] = 6951.349708195207313; g[6] = 196.588335760200493; g[7] = 494.652510416191831; g[8] = 0.; g[9] = .262888955891235; g[10] = .118645304605935; g[11] = 9.8583337437e-4; g[12] = 0.; g[13] = .982333333335689; g[14] = .266202592278773; g[15] = 107.75061518337175; g[16] = 4.221215621644779; g[17] = 0.; g[18] = 35.; g[19] = 41.; g[20] = 7.; g[21] = 183.; g[22] = 10.; g[23] = 1.; g[24] = 6.; g[25] = 2.; g[26] = 16.; g[27] = 76.; g[28] = 2.; g[29] = 194.; g[30] = 11.; g[31] = 75.; g[32] = 85851.; g[33] = 9.; } if (*i67 == 2) { g[1] = 88.378305246891642; g[2] = .596671879892428; g[3] = .96238124550318; g[4] = 3.812970488946382; g[5] = 3555.889503794543998; g[6] = 284.029023525477442; g[7] = 278.15945695917793; g[8] = .467000314148584; g[9] = .755952269574951; g[10] = .103963081719344; g[11] = 0.; g[12] = 0.; g[13] = .034604619091198; g[14] = .447568930956009; g[15] = 112.349387854963524; g[16] = 7.661018416622316; g[17] = 0.; g[18] = 7.; g[19] = 37.; g[20] = 2.; g[21] = 354.; g[22] = 3.; g[23] = 8.; g[24] = 9.; g[25] = 2.; g[26] = 8.; g[27] = 1925.; g[28] = 63.; g[29] = 281.; g[30] = 6.; g[31] = 44.; g[32] = 17294.; g[33] = 23.; } if (*i67 == 3) { g[1] = 1.00449566; g[2] = .01859477; g[3] = .97719994; g[4] = 1.07101045; g[5] = 1345.89422853; g[6] = 185.25796624; g[7] = 454.99070924; g[8] = .4030333; g[9] = .98286025; g[10] = .0718894; g[11] = 3.131e-5; g[12] = 0.; g[13] = .20107243; g[14] = .32253905; g[15] = 28.95573242; g[16] = 4.35016847; g[17] = 1.; g[18] = 59.94655842; g[19] = 10.40235209; g[20] = 45.5960256; g[21] = 5.33303639; g[22] = 11.0260158; g[23] = 5.62258459; g[24] = 11.8758362; g[25] = 9.03405164; g[26] = 3.54369856; g[27] = 1555.70240325; g[28] = 3.27561139; g[29] = 280.72701458; g[30] = 1.6899118; g[31] = 7.72937078; g[32] = 2162.86269813; g[33] = 5.22324273; } return 0; } /* o3_ */ /* Subroutine */ int o37_(integer *k, doublereal *i4, integer *i32, integer * w) { /* System generated locals */ integer i__1; /* Local variables */ static integer j, i57; /* Parameter adjustments */ --i4; /* Function Body */ i57 = 0; i__1 = *k; for (j = 1; j <= i__1; ++j) { i57 += j; } i__1 = *k; for (j = 1; j <= i__1; ++j) { i4[*w + j - 1] = (doublereal) (*k - j + 1) / (doublereal) i57; } return 0; } /* o37_ */ /* Subroutine */ int o28_(integer *m, integer *i8, integer *k, doublereal *g, doublereal *i5, doublereal *i2, doublereal *i4, integer *i32, integer *i19, integer *i49, integer *i9, doublereal *k3) { /* System generated locals */ integer i__1, i__2; /* Builtin functions */ double d_nint(doublereal *); /* Local variables */ static integer i__, j, q, r__, s, t; static doublereal u, v; static integer w; static doublereal z__, i34, k32, k33; extern /* Subroutine */ int o10_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *); extern doublereal o25_(doublereal *), o16_(doublereal *, doublereal *); static doublereal i2i, i5i; /* Parameter adjustments */ --k3; --i4; --i2; --i5; --g; /* Function Body */ u = i4[*i9 + 1]; v = i4[*i9 + 2]; q = *k - 1; r__ = *i49 - 1; s = *i19 - 1; t = s + *m; w = s - *m; k32 = k3[2]; k33 = k3[3]; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { i34 = o25_(&i4[1]); z__ = i4[r__ + i__] * o16_(&i4[1], &i4[2]); if (i34 <= u) { z__ += i4[s + i__]; } else { if (i34 <= v) { z__ += i4[t + i__]; } else { i__2 = q; for (j = 3; j <= i__2; ++j) { if (i34 <= i4[*i9 + j]) { goto L1; } } L1: z__ += i4[w + j * *m + i__]; } } i5i = i5[i__]; i2i = i2[i__]; if (z__ < i5i) { if (i34 >= k32) { z__ = i5i + (i5i - z__) * k33; if (z__ > i2i) { z__ = i2i; } } else { z__ = i5i; } goto L2; } if (z__ > i2i) { if (i34 >= k32) { z__ = i2i - (z__ - i2i) * k33; if (z__ < i5i) { z__ = i5i; } } else { z__ = i2i; } } L2: g[i__] = z__; } if (*i8 <= 0) { return 0; } i__1 = *m; for (i__ = *m - *i8 + 1; i__ <= i__1; ++i__) { g[i__] = d_nint(&g[i__]); } if (*i8 < *m) { return 0; } r__ = *i19 - 1 - *m; i__1 = *k; for (j = 1; j <= i__1; ++j) { s = r__ + j * *m; i__2 = *m; for (i__ = 1; i__ <= i__2; ++i__) { t = s + i__; if (g[i__] < i4[t]) { goto L88; } if (g[i__] > i4[t]) { goto L88; } } o10_(m, i8, &g[1], &i5[1], &i2[1], &i4[1], i32); return 0; L88: ; } return 0; } /* o28_ */ /* Subroutine */ int k22_(integer *f, integer *m, integer *n, integer *i0, doublereal *l, doublereal *x, doublereal *g, doublereal *i16) { /* System generated locals */ integer i__1, i__2; /* Local variables */ static integer c__, i__, k23; static doublereal i17, k24, i56; extern /* Subroutine */ int o31_(doublereal *, doublereal *, integer *, integer *, doublereal *); /* Parameter adjustments */ --g; --x; --l; /* Function Body */ if (*f <= 1) { return 0; } if (*n <= 0) { i56 = l[1]; k23 = 1; i__1 = *f; for (c__ = 2; c__ <= i__1; ++c__) { if (l[c__] < i56) { i56 = l[c__]; k23 = c__; } } } if (*n >= 1) { o31_(&i17, &x[1], n, i0, i16); i56 = l[1]; k24 = i17; k23 = 1; i__1 = *f; for (c__ = 2; c__ <= i__1; ++c__) { o31_(&i17, &x[(c__ - 1) * *n + 1], n, i0, i16); if (k24 <= 0.) { if (i17 <= 0. && l[c__] < i56) { i56 = l[c__]; k24 = i17; k23 = c__; } } else { if (i17 < k24) { i56 = l[c__]; k24 = i17; k23 = c__; } } } } i__1 = *f; for (c__ = 1; c__ <= i__1; ++c__) { l[c__] = l[k23]; i__2 = *n; for (i__ = 1; i__ <= i__2; ++i__) { x[(c__ - 1) * *n + i__] = x[(k23 - 1) * *n + i__]; } i__2 = *m; for (i__ = 1; i__ <= i__2; ++i__) { g[(c__ - 1) * *m + i__] = g[(k23 - 1) * *m + i__]; } } return 0; } /* k22_ */ /* Subroutine */ int o9_(doublereal *g004, doublereal *g019, doublereal *io23, integer *o, integer *g005, integer *io10, doublereal *io16) { /* System generated locals */ doublereal d__1, d__2; /* Builtin functions */ double sqrt(doublereal), pow_dd(doublereal *, doublereal *); /* Local variables */ extern doublereal rio5_(doublereal *, doublereal *); *io10 = 1; *io16 = 0.; if ((d__1 = *g019 - *io23, abs(d__1)) < 1e32) { if ((d__1 = *g019 - *io23, abs(d__1)) > 1.) { if (*o <= 2) { d__2 = (doublereal) (*g005); *g004 -= sqrt((d__1 = *g019 - *io23, abs(d__1))) / pow_dd(& d__2, &c_b141); } else { *g004 -= sqrt((d__1 = *g019 - *io23, abs(d__1))); } } else { *g004 -= (d__1 = *g019 - *io23, abs(d__1)); } *io16 = rio5_(g019, io23); } else { *g004 += -1.; } return 0; } /* o9_ */ /* Subroutine */ int o6_(integer *o, doublereal *g008, doublereal *io9) { /* System generated locals */ integer i__1; doublereal d__1; /* Builtin functions */ double pow_dd(doublereal *, doublereal *); /* Local variables */ static integer maxobji67, i__; extern integer i301_(doublereal *, doublereal *); static doublereal g018; extern doublereal io27_(doublereal *); static doublereal i17t, fx25, fx26, sung; /* Parameter adjustments */ --g008; /* Function Body */ i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { g008[i__] = 1.; } if (i301_(io9, &c_b14) == 1) { goto L999; } if (*io9 >= 1.) { goto L999; } i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { g008[i__] = 0.; } maxobji67 = min(*o,8); i__1 = maxobji67; for (i__ = 1; i__ <= i__1; ++i__) { d__1 = (doublereal) (i__ - 1); g018 = *io9 * pow_dd(&c_b27, &d__1); g018 -= io27_(&g018); g018 *= 10.; i17t = g018 - io27_(&g018); if (i17t > .99999999) { g018 += 1; } g018 -= i17t; g008[i__] = g018; } sung = 0.; i__1 = maxobji67; for (i__ = 1; i__ <= i__1; ++i__) { sung += g008[i__]; } i__1 = maxobji67; for (i__ = 1; i__ <= i__1; ++i__) { g008[i__] /= sung; } fx25 = 0.; i__1 = maxobji67; for (i__ = 1; i__ <= i__1; ++i__) { if (g008[i__] > fx25) { fx25 = g008[i__]; } } fx26 = 1. / fx25; if (fx26 > 1.) { i__1 = maxobji67; for (i__ = 1; i__ <= i__1; ++i__) { g008[i__] *= fx26; } } L999: return 0; } /* o6_ */ /* Subroutine */ int o10_(integer *m, integer *i8, doublereal *g, doublereal * i5, doublereal *i2, doublereal *i4, integer *i32) { /* System generated locals */ integer i__1; /* Local variables */ static integer i__; extern /* Subroutine */ int o30_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, integer *); extern doublereal o25_(doublereal *); static integer g017; static doublereal io6; /* Parameter adjustments */ --i4; --i2; --i5; --g; /* Function Body */ io6 = 1. / (doublereal) (*m); g017 = 0; i__1 = *m; for (i__ = 1; i__ <= i__1; ++i__) { if (i5[i__] >= i2[i__]) { goto L1; } if (o25_(&i4[1]) <= io6) { if (g[i__] <= i5[i__]) { g[i__] = i5[i__] + 1.; g017 = 1; goto L1; } if (g[i__] >= i2[i__]) { g[i__] = i2[i__] - 1.; g017 = 1; goto L1; } if (o25_(&i4[1]) <= .5) { g[i__] += -1.; g017 = 1; } else { g[i__] += 1.; g017 = 1; } } L1: ; } if (g017 == 0) { o30_(m, i8, &g[1], &i5[1], &i2[1], &i4[1], i32); } return 0; } /* o10_ */ /* Subroutine */ int io17_(integer *o, integer *n, integer *m, doublereal * g014, doublereal *l, doublereal *x, doublereal *g, doublereal *i17, doublereal *i16, doublereal *g001, doublereal *io1, doublereal *g002, doublereal *pl, integer *k16, doublereal *i306, doublereal *i307, doublereal *g008, doublereal *io9, integer *io4, integer *io20, integer *io2, integer *io10, doublereal *io16, integer *g005) { /* Initialized data */ static integer i10ker = 0; /* System generated locals */ integer i__1, i__2; doublereal d__1, d__2; /* Local variables */ static integer i__, k; extern /* Subroutine */ int o1_(integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *); static doublereal k6, t1, t2, t3, t4; static integer i431; extern doublereal i305_(void); static integer i432, i433; static doublereal i437; static integer i449; static doublereal k4t, fx07, fx19; extern doublereal rio5_(doublereal *, doublereal *); static integer best_i__; /* Parameter adjustments */ --g008; --i307; --i306; --pl; --g002; --g; --x; --l; /* Function Body */ if (*io9 >= 1.) { goto L999; } if (*i17 > *i16) { goto L999; } if (*io1 > *i16) { goto L999; } i449 = (integer) pl[1]; if (i449 < 1) { goto L999; } k6 = .001; if (*io4 <= 1) { i10ker = 0; *io4 = 666; } ++i10ker; i431 = 2; i432 = *k16 * *o + 2; i433 = *k16 * *o + 1 + *k16 * *n + 1; if (*io10 == 1 && *io16 > .05) { goto L888; } i437 = 0.; t1 = 0.; i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { if (g008[i__] > 0.) { if (l[i__] < g002[i__]) { i437 += rio5_(&l[i__], &g002[i__]); } if (l[i__] > g002[i__]) { t1 += rio5_(&l[i__], &g002[i__]); } } } if (i437 > 0. && t1 <= 0.) { if (*g014 >= *g001) { *g014 = *g001 - abs(*g001) * 1e-8; } goto L888; } if (i437 <= 0. && t1 > 0.) { if (*g014 <= *g001) { /* Computing MAX */ d__1 = 1., d__2 = abs(*g001); *g014 = *g001 + t1 * max(d__1,d__2); } goto L999; } if (i437 <= 0. && t1 <= 0.) { if (*g014 > *g001) { *g014 = *g001; } goto L999; } if (*io2 == 0 && i449 >= 1) { if (*g014 <= *g001) { *g014 = *g001 + abs(*g001) * 1e-8; goto L999; } } if (*io2 == 1 && i449 == 1) { if (*g014 >= *g001) { *g014 = *g001 - abs(*g001) * 1e-8; goto L999; } } if (*io20 >= 2 && *g014 > *g001) { goto L999; } if (*io2 == 1) { goto L1; } if (*g014 <= *g001) { /* Computing MAX */ d__1 = 1., d__2 = abs(*g001); *g014 = *g001 + k6 * max(d__1,d__2); } goto L999; L1: fx19 = i305_(); i__1 = i449; for (i__ = 1; i__ <= i__1; ++i__) { k4t = 0.; i__2 = *o; for (k = 1; k <= i__2; ++k) { k4t += rio5_(&g002[k], &pl[i431 - 1 + *o * (i__ - 1) + k]); } if (k4t < fx19) { fx19 = k4t; } if (k4t <= k6) { goto L2; } } if (*g014 >= *g001) { *g014 = *g001 - abs(*g001) * 1e-8; } goto L888; L2: o1_(o, &l[1], i17, i16, &i306[1], &i307[1], io9, &c_b14, &g008[1], &t2, g005); o1_(o, &g002[1], i17, i16, &i306[1], &i307[1], io9, &c_b14, &g008[1], &t3, g005); if (*g014 > *g001 && t2 < t3) { *g014 = *g001 - abs(*g001) * 1e-8; goto L888; } if (*g014 < *g001 && t2 >= t3) { *g014 = *g001 + (d__1 = t2 - t3, abs(d__1)); goto L999; } if (i10ker >= 10) { i10ker = 0; goto L888; } L999: return 0; L888: if (i449 < 3) { goto L999; } fx07 = i305_(); best_i__ = 1; i__1 = i449; for (i__ = 1; i__ <= i__1; ++i__) { o1_(o, &pl[i431 - 1 + *o * (i__ - 1) + 1], i17, i16, &i306[1], &i307[ 1], io9, &c_b14, &g008[1], &t4, g005); if (t4 <= fx07) { fx07 = t4; best_i__ = i__; } } k4t = 0.; i__ = best_i__; i__1 = *o; for (k = 1; k <= i__1; ++k) { k4t += rio5_(&g002[k], &pl[i431 - 1 + *o * (i__ - 1) + k]); } if (k4t <= .05) { } else { i__1 = *o; for (k = 1; k <= i__1; ++k) { } i__1 = *o; for (k = 1; k <= i__1; ++k) { l[k] = pl[i431 - 1 + *o * (best_i__ - 1) + k]; } i__1 = *n; for (k = 1; k <= i__1; ++k) { x[k] = pl[i432 - 1 + *n * (best_i__ - 1) + k]; } i__1 = *m; for (k = 1; k <= i__1; ++k) { g[k] = pl[i433 - 1 + *m * (best_i__ - 1) + k]; } *g014 = *g001 - abs(*g001) * 1e-8; } return 0; } /* io17_ */ /* Subroutine */ int t5_(integer *g016, integer *i67, integer *p, doublereal * z__) { /* Builtin functions */ double sqrt(doublereal); /* Local variables */ static integer i__; static doublereal i2[33], i5[33]; extern /* Subroutine */ int io12_(integer *, doublereal *), io13_(integer *, doublereal *); static doublereal io14[33]; static integer maxp; /* Parameter adjustments */ --z__; /* Function Body */ for (i__ = 1; i__ <= 33; ++i__) { io14[i__ - 1] = 0.; } if (*g016 == 1) { io13_(i67, io14); } if (*g016 == 2) { io12_(i67, io14); } maxp = min(*p,100); for (i__ = 1; i__ <= 33; ++i__) { z__[i__] += io14[i__ - 1] * (z__[i__] - z__[i__] / sqrt((doublereal) maxp)); } i5[0] = .1; i2[0] = 90.; i5[1] = 0.; i2[1] = 1.; i5[2] = 0.; i2[2] = 1.; i5[3] = 0.; i2[3] = 9.; i5[4] = .01; i2[4] = 9e3; i5[5] = .01; i2[5] = 500.; i5[6] = 1.; i2[6] = 5e3; i5[7] = 0.; i2[7] = 1.; i5[8] = 0.; i2[8] = 1.; i5[9] = 1e-12; i2[9] = .5; i5[10] = 0.; i2[10] = .001; i5[11] = 0.; i2[11] = 0.; i5[12] = 0.; i2[12] = .999; i5[13] = 0.; i2[13] = 1.; i5[14] = 1.; i2[14] = 500.; i5[15] = 4.; i2[15] = 12.; i5[16] = 0.; i2[16] = 0.; i5[17] = 2.; i2[17] = 200.; i5[18] = 1.; i2[18] = 1e3; i5[19] = 1.; i2[19] = 100.; i5[20] = 1.; i2[20] = 500.; i5[21] = 1.; i2[21] = 12.; i5[22] = 1.; i2[22] = 12.; i5[23] = 1.; i2[23] = 12.; i5[24] = 1.; i2[24] = 12.; i5[25] = 1.; i2[25] = 500.; i5[26] = 2.; i2[26] = 2e3; i5[27] = 2.; i2[27] = 100.; i5[28] = 2.; i2[28] = 2e3; i5[29] = 1.; i2[29] = 12.; i5[30] = 1.; i2[30] = 100.; i5[31] = 10.; i2[31] = 9e4; i5[32] = 1.; i2[32] = 30.; for (i__ = 1; i__ <= 33; ++i__) { if (z__[i__] < i5[i__ - 1]) { z__[i__] = i5[i__ - 1]; } if (z__[i__] > i2[i__ - 1]) { z__[i__] = i2[i__ - 1]; } } return 0; } /* t5_ */ /* Subroutine */ int io13_(integer *i67, doublereal *g) { /* Parameter adjustments */ --g; /* Function Body */ if (*i67 == 1) { g[1] = 4.29154553; g[2] = 1.47194224; g[3] = 1.54997898; g[4] = -.17704074; g[5] = -1.; g[6] = .56172152; g[7] = .05515924; g[8] = -.3771567; g[9] = 3.74633499; g[10] = 1.78936255; g[11] = -.15518801; g[12] = -.98360507; g[13] = .58322553; g[14] = -.9608422; g[15] = 1.02212226; g[16] = 3.58965909; g[17] = 2.13785201; g[18] = .10303835; g[19] = 4.04614941; g[20] = .05596182; g[21] = -.74156199; g[22] = 5.19929225; g[23] = 4.10382737; g[24] = 4.4548273; g[25] = 4.41742088; g[26] = .38736892; g[27] = .17670075; g[28] = 4.15725493; g[29] = -.22783536; g[30] = .58237005; g[31] = 3.04829469; g[32] = -1.; g[33] = -.28213036; } if (*i67 == 2) { g[1] = 1.07767821; g[2] = -.44761809; g[3] = .65368561; g[4] = -1.; g[5] = -.73027076; g[6] = -.96722505; g[7] = -.16648158; g[8] = -.9630052; g[9] = -.43043102; g[10] = -.33013524; g[11] = -.53458138; g[12] = .04519436; g[13] = .21059818; g[14] = 1.85997072; g[15] = 1.00887824; g[16] = .05296895; g[17] = -.75654657; g[18] = 3.99405505; g[19] = 2.10079382; g[20] = .71820448; g[21] = -.79308107; g[22] = .71794093; g[23] = 1.59649466; g[24] = -.42941671; g[25] = .05688063; g[26] = -.36715641; g[27] = .10866524; g[28] = -.40182486; g[29] = .87367028; g[30] = -.15730903; g[31] = 2.53653413; g[32] = -.2767428; g[33] = -.21904374; } return 0; } /* io13_ */ /* Subroutine */ int io12_(integer *i67, doublereal *g) { /* Parameter adjustments */ --g; /* Function Body */ if (*i67 == 1) { g[1] = 2.08181871; g[2] = .19941008; g[3] = .663559; g[4] = .2297929; g[5] = .45194597; g[6] = -.73231382; g[7] = 1.12731735; g[8] = .15438953; g[9] = .92589979; g[10] = .66252956; g[11] = 1.51928446; g[12] = -.42972569; g[13] = 1.67373601; g[14] = 1.88837352; g[15] = -.21119113; g[16] = .02374419; g[17] = .45582854; g[18] = -.27602405; g[19] = -.53242829; g[20] = .14369251; g[21] = -.00105148; g[22] = -.77738419; g[23] = -.53794328; g[24] = -.55895883; g[25] = .28001733; g[26] = -.11034496; g[27] = -.40392603; g[28] = .29138653; g[29] = .2377215; g[30] = .20211495; g[31] = .138778; g[32] = .65156465; g[33] = -.99249717; } if (*i67 == 2) { g[1] = -.4312276; g[2] = -.15189541; g[3] = .03960097; g[4] = -.33023865; g[5] = .37549423; g[6] = .46619011; g[7] = .01955984; g[8] = -.61703271; g[9] = -.10107408; g[10] = .0082648; g[11] = -.03994651; g[12] = -.21620967; g[13] = .12164474; g[14] = .12107576; g[15] = .18700566; g[16] = -.56889807; g[17] = .00153063; g[18] = -.07262216; g[19] = .80049358; g[20] = -.20426258; g[21] = .32111134; g[22] = .20215425; g[23] = .25647943; g[24] = .1400869; g[25] = .16738659; g[26] = 1.03552112; g[27] = .19846093; g[28] = -.06430121; g[29] = .12672987; g[30] = -.33030999; g[31] = .15749225; g[32] = -.05867185; g[33] = .59177165; } return 0; } /* io12_ */ integer i301_(doublereal *a, doublereal *b) { /* System generated locals */ integer ret_val; ret_val = 0; if (*a < *b) { return ret_val; } if (*a > *b) { return ret_val; } ret_val = 1; return ret_val; } /* i301_ */ integer i304_(doublereal *g) { /* System generated locals */ integer ret_val; ret_val = 0; if (*g != *g) { ret_val = 1; } return ret_val; } /* i304_ */ doublereal i305_(void) { /* Initialized data */ static integer k27 = 1; static doublereal k26 = 1.; /* System generated locals */ doublereal ret_val, d__1; /* Builtin functions */ double pow_dd(doublereal *, doublereal *); /* Local variables */ static integer i__; static doublereal i44, k25; static integer k28; if (k27 == 1) { k27 = 0; i44 = 0.; k28 = 0; for (i__ = 1; i__ <= 99; ++i__) { i44 = k26; k26 *= 10.; ++k28; if (i44 >= k26) { goto L1; } } L1: k25 = (doublereal) (k28 - 1); k26 = (d__1 = pow_dd(&c_b27, &k25), abs(d__1)); if (k26 < 1e16) { k26 = 1e16; } } ret_val = k26; return ret_val; } /* i305_ */ /* Subroutine */ int io7_(doublereal *l, doublereal *x, integer *o, integer * n) { /* System generated locals */ integer i__1; /* Local variables */ static integer i__; static doublereal k26; extern integer i304_(doublereal *); extern doublereal i305_(void); /* Parameter adjustments */ --x; --l; /* Function Body */ k26 = i305_(); i__1 = *o; for (i__ = 1; i__ <= i__1; ++i__) { if (i304_(&l[i__]) == 1) { l[i__] = k26; } if (l[i__] > k26) { l[i__] = k26; } } i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { if (i304_(&x[i__]) == 1) { x[i__] = -k26; } if (x[i__] < -k26) { x[i__] = -k26; } } return 0; } /* io7_ */ doublereal rio5_(doublereal *a, doublereal *b) { /* System generated locals */ doublereal ret_val, d__1, d__2; /* Local variables */ static doublereal maxab; /* Computing MAX */ d__1 = abs(*a), d__2 = abs(*b); maxab = max(d__1,d__2); ret_val = (d__1 = *a - *b, abs(d__1)); ret_val /= max(1.,maxab); return ret_val; } /* rio5_ */ /* Subroutine */ int o18_(integer *i67s, char *i15, ftnlen i15_len) { extern /* Subroutine */ int alphabet_(char *, integer *, ftnlen); static integer i__; /* Parameter adjustments */ --i67s; /* Function Body */ for (i__ = 1; i__ <= 60; ++i__) { alphabet_(i15 + (i__ - 1), &i67s[i__], (ftnlen)1); } return 0; } /* o18_ */ /* end ol code */ /* Subroutine */ int alphabet_(char *a, integer *b, ftnlen a_len) { *b = 0; if (*(unsigned char *)a == 'A') { *b = 52; } if (*(unsigned char *)a == 'B') { *b = 28; } if (*(unsigned char *)a == 'C') { *b = 49; } if (*(unsigned char *)a == 'D') { *b = 30; } if (*(unsigned char *)a == 'E') { *b = 31; } if (*(unsigned char *)a == 'F') { *b = 32; } if (*(unsigned char *)a == 'G') { *b = 33; } if (*(unsigned char *)a == 'H') { *b = 34; } if (*(unsigned char *)a == 'I') { *b = 35; } if (*(unsigned char *)a == 'J') { *b = 36; } if (*(unsigned char *)a == 'K') { *b = 37; } if (*(unsigned char *)a == 'L') { *b = 38; } if (*(unsigned char *)a == 'M') { *b = 39; } if (*(unsigned char *)a == 'N') { *b = 40; } if (*(unsigned char *)a == 'O') { *b = 41; } if (*(unsigned char *)a == 'P') { *b = 42; } if (*(unsigned char *)a == 'Q') { *b = 43; } if (*(unsigned char *)a == 'R') { *b = 44; } if (*(unsigned char *)a == 'S') { *b = 45; } if (*(unsigned char *)a == 'T') { *b = 46; } if (*(unsigned char *)a == 'U') { *b = 47; } if (*(unsigned char *)a == 'V') { *b = 48; } if (*(unsigned char *)a == 'W') { *b = 29; } if (*(unsigned char *)a == 'X') { *b = 50; } if (*(unsigned char *)a == 'Y') { *b = 51; } if (*(unsigned char *)a == 'Z') { *b = 27; } if (*(unsigned char *)a == '0') { *b = 53; } if (*(unsigned char *)a == '1') { *b = 54; } if (*(unsigned char *)a == '2') { *b = 55; } if (*(unsigned char *)a == '3') { *b = 56; } if (*(unsigned char *)a == '4') { *b = 57; } if (*(unsigned char *)a == '5') { *b = 58; } if (*(unsigned char *)a == '6') { *b = 59; } if (*(unsigned char *)a == '7') { *b = 60; } if (*(unsigned char *)a == '8') { *b = 61; } if (*(unsigned char *)a == '9') { *b = 62; } if (*(unsigned char *)a == 'a') { *b = 23; } if (*(unsigned char *)a == 'b') { *b = 2; } if (*(unsigned char *)a == 'c') { *b = 3; } if (*(unsigned char *)a == 'd') { *b = 16; } if (*(unsigned char *)a == 'e') { *b = 5; } if (*(unsigned char *)a == 'f') { *b = 13; } if (*(unsigned char *)a == 'g') { *b = 7; } if (*(unsigned char *)a == 'h') { *b = 8; } if (*(unsigned char *)a == 'i') { *b = 9; } if (*(unsigned char *)a == 'j') { *b = 10; } if (*(unsigned char *)a == 'k') { *b = 11; } if (*(unsigned char *)a == 'l') { *b = 12; } if (*(unsigned char *)a == 'm') { *b = 6; } if (*(unsigned char *)a == 'n') { *b = 14; } if (*(unsigned char *)a == 'o') { *b = 15; } if (*(unsigned char *)a == 'p') { *b = 4; } if (*(unsigned char *)a == 'q') { *b = 17; } if (*(unsigned char *)a == 'r') { *b = 18; } if (*(unsigned char *)a == 's') { *b = 19; } if (*(unsigned char *)a == 't') { *b = 20; } if (*(unsigned char *)a == 'u') { *b = 21; } if (*(unsigned char *)a == 'v') { *b = 22; } if (*(unsigned char *)a == 'w') { *b = 1; } if (*(unsigned char *)a == 'x') { *b = 24; } if (*(unsigned char *)a == 'y') { *b = 25; } if (*(unsigned char *)a == 'z') { *b = 26; } if (*(unsigned char *)a == '_') { *b = 64; } if (*(unsigned char *)a == '(') { *b = 65; } if (*(unsigned char *)a == ')') { *b = 66; } if (*(unsigned char *)a == '+') { *b = 67; } if (*(unsigned char *)a == '-') { *b = 68; } if (*(unsigned char *)a == '&') { *b = 69; } if (*(unsigned char *)a == '.') { *b = 70; } if (*(unsigned char *)a == ',') { *b = 71; } if (*(unsigned char *)a == ':') { *b = 72; } if (*(unsigned char *)a == ';') { *b = 73; } if (*(unsigned char *)a == '*') { *b = 74; } if (*(unsigned char *)a == '=') { *b = 75; } if (*(unsigned char *)a == '/') { *b = 76; } if (*(unsigned char *)a == '!') { *b = 80; } if (*(unsigned char *)a == '[') { *b = 83; } if (*(unsigned char *)a == ']') { *b = 84; } return 0; } /* alphabet_ */ /* This is the MIDACO.c f2c-header from below */ #ifdef KR_headers double pow(); double pow_dd(ap, bp) doublereal *ap, *bp; #else #undef abs #include "math.h" #ifdef __cplusplus extern "C" { #endif double pow_dd(doublereal *ap, doublereal *bp) #endif { return(pow(*ap, *bp) ); } #ifdef __cplusplus } #endif double d_nint(x) doublereal *x; { double floor(); return( (*x)>=0 ? floor(*x + .5) : -floor(.5 - *x) ); } #ifdef __cplusplus extern "C" { #endif #ifdef KR_headers double pow_di(ap, bp) doublereal *ap; integer *bp; #else double pow_di(doublereal *ap, integer *bp) #endif { double pow, x; integer n; unsigned long u; pow = 1; x = *ap; n = *bp; if(n != 0) { if(n < 0) { n = -n; x = 1/x; } for(u = n; ; ) { if(u & 01) pow *= x; if(u >>= 1) x *= x; else break; } } return(pow); } #ifdef __cplusplus } #endif #ifdef __cplusplus extern "C" { #endif #ifdef KR_headers integer pow_ii(ap, bp) integer *ap, *bp; #else integer pow_ii(integer *ap, integer *bp) #endif { integer pow, x, n; unsigned long u; x = *ap; n = *bp; if (n <= 0) { if (n == 0 || x == 1) return 1; if (x != -1) return x == 0 ? 1/x : 0; n = -n; } u = n; for(pow = 1; ; ) { if(u & 01) pow *= x; if(u >>= 1) x *= x; else break; } return(pow); } #ifdef __cplusplus } #endif #ifdef KR_headers double floor(); integer i_dnnt(x) doublereal *x; #else #undef abs #include "math.h" #ifdef __cplusplus extern "C" { #endif integer i_dnnt(doublereal *x) #endif { return (integer)(*x >= 0. ? floor(*x + .5) : -floor(.5 - *x)); } #ifdef __cplusplus } #endif /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C The following subroutines handle all printing commands for MIDACO. C These subroutines will also check the MAXEVAL and MAXTIME criteria. C Note that these subroutines are called independently from MIDACO C and MIDACO itself does not include any print commands (due to C compiler portability and robustness). CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ #include #include #include /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /* This function opens a file by either the fopen or fopen_s command */ /* In case you use standard c compilers, such as gcc, use the fopen */ /* In case you use MS Visual C++ use the fopen_s command */ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ FILE* open_file( FILE *iout , char *filename) { iout = fopen( filename, "w"); /* standard C command */ //fopen_s( &iout, filename, "w"); /* MS Visual C++ command */ return iout; } /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /* This is the time command, adopt to comiler, if necessary */ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ double gettime(){time_t second;second=time(NULL);return (double)second;} /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /* These are flush and close commands, delete or change if necessary */ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ int flush_output( FILE *iout ){ fflush( iout ); return 0; } int close_output( FILE *iout ){ fclose( iout ); return 0; } /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ int warnings_and_erros(long int*,FILE*);int print_head(long int,long int, long int,long int,long int,long int,double*,long int,long int,long int, long int,char*,FILE*);int print_line(long int,long int,double,double, double,double*,FILE*);int print_solution(long int,long int,long int, long int,double*,double*,double*,double*,double*,double*,double,long int, double,long int,double*,FILE*);int print_final(long int,long int,double, double,long int,long int,long int,long int,long int,double*,double*, double*,double*,double*,double*,double*,double,long int,double*,FILE*); int print_paretofront(long int,long int,long int,double*,double*,double*, int); int save_history(long int,long int,long int,long int,double*, double*,double*,FILE*,long int,long int,double*); /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ int midaco_print(int c, long int printeval, long int save2file, long int *iflag, long int *istop, double *f, double *g, double *x, double *xl, double *xu, long int o, long int n, long int ni, long int m, long int me, double *rw, double *pf, long int maxeval, long int maxtime, double *param, long int P, char *key) { /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /* Increase size of bestg and bestx for large scale problems */ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ static double bestg[1000]; static double bestx[1000]; static double previous_x[1000]; /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ static FILE* iout; /* console screen */ static FILE* iout1; /* MIDADCO_SCREEN.TXT */ static FILE* iout2; /* MIDADCO_SOLUTION.TXT */ static FILE* iout4; /* MIDADCO_HISTORY.TXT */ static double tstart, tnow, tmax; static long int eval; static double acc; static int tic; static int extraoffset; static int q; static int kx; static int kf; static int kg; static int kres; static int wx; static int wf; static int wg; static int wres; static int kbest; static int wbest; static double bestf[1]; static double bestr[1]; static int update,i; static double dummy_f, dummy_vio; static int pfmax; static long int tix; /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ if(c == 1) { *iflag = 0; *istop = 0; tmax = (double) maxtime; tstart = gettime(); eval = 0; if(param[0] <= 0.0) { acc = 0.001; }else{ acc = param[0]; } extraoffset = 5*(P+o+n+m)+100; q = 102*n+(m+2*o)+516 + extraoffset; kx = 9; kf = 9+n; kg = 9+n+1; kres = 9+n+1+m; if( o > 1 ){ kres = 9+n+1+ (m+2*o); } wx = q; wf = q+n; wg = q+n+1; wres = q+n+1+m; if( o > 1 ){ wres = q+n+1+ (m+2*o); } iout = stdout; if((save2file > 0)&&( printeval > 0)) { iout1 = open_file( &*iout1, "MIDACO_SCREEN.TXT"); iout2 = open_file( &*iout2, "MIDACO_SOLUTION.TXT"); } bestf[0] = 1.0e+99; bestr[0] = 1.0e+99; dummy_f = 1.0e+99; dummy_vio = 1.0e+99; tic = 0; pfmax = 1000; if( param[9] >= 1.0 ){ pfmax = (int)param[9]; } if( param[9] <=-1.0 ){ pfmax = -1*((int)param[9]); } if(printeval >= 1) { print_head(P,o,n,ni,m,me,&*param,maxeval,maxtime, printeval,save2file,&*key,&*iout); if(save2file > 0) { print_head(P,o,n,ni,m,me,&*param,maxeval,maxtime, printeval,save2file,&*key,&*iout1); } } if((save2file > 0)&&(printeval > 0)) { fprintf(iout2," MIDACO - SOLUTION\n"); fprintf(iout2," -----------------\n"); fprintf(iout2,"\n This file saves the current best solution X found by MIDACO."); fprintf(iout2,"\n This file is updated after every PRINTEVAL function evaluation,"); fprintf(iout2,"\n if X has been improved.\n\n"); } if((save2file > 0)&&(printeval > 0)) { flush_output( &*iout1 ); flush_output( &*iout2 ); } } /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ if(save2file >= 2){ if(iflag==0){tix=0;} tix = tix + 1; if(tix>save2file){tix=1;close_output( &*iout4 );} if(tix==1){ iout4 = open_file( &*iout4, "MIDACO_HISTORY.TXT"); } save_history(P,o,n,m,f,g,x,&*iout4,tix,*istop,previous_x); } /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ if(c == 2) { tnow = gettime()-tstart; eval = eval + P; if(*iflag >= 10) { warnings_and_erros( iflag, &*iout); if(save2file > 0) { warnings_and_erros( iflag, &*iout1); warnings_and_erros( iflag, &*iout2); } } if(printeval > 0) { tic = tic + P; if((tic >= printeval)||(eval == P)||(*iflag >= 1)) { if(eval < 0) { tic = 0; eval = - eval - 2*printeval; } if(eval > P){ tic = 0; } if(rw[kres] == rw[wres]){ kbest = kf; wbest = wf; }else{ kbest = kres; wbest = wres; } if((rw[wbest] < rw[kbest]) || (*iflag >= 1)||(*iflag == -300)||(*iflag == -500)){ bestf[0] = rw[wf]; bestr[0] = rw[wres]; for(i=0;i 0) { print_line( o, eval, tnow, bestf[0], bestr[0], &*pf, &*iout1); } if(save2file > 0) { update = 0; if( (bestr[0] < dummy_vio)|| ((bestr[0] == dummy_vio)&&(bestf[0] < dummy_f)) ) { dummy_f = bestf[0]; dummy_vio = bestr[0]; update = 1; } if( update > 0 ) { fprintf(iout2,"\n\n CURRENT BEST SOLUTION"); print_solution( o, n, m, me, &*bestx, &*bestg, &*bestf, &*bestr, &*xl, &*xu, acc, eval, tnow, *iflag, &*pf, &*iout2); } flush_output( &*iout1 ); flush_output( &*iout2 ); if( o > 1 ) { if(( save2file >= 1 )&&( printeval >= 1)) { print_paretofront(o,m,n,&*pf,&*bestx,&*bestg,pfmax); } } } } } } if(*istop == 0) { if(tnow >= tmax) { *iflag = -999;} if(eval >= maxeval-1) { if(maxeval < 99999999){ *iflag = -999;} } /* special case maxeval = 1 */ if( maxeval<=1 ){ { if(tnow >= tmax) { *iflag = -999;} if(eval >= maxeval-1) { if(maxeval < 99999999){ *iflag = -999;} } /* special case maxeval = 1 */ if((tnow<=0)||(maxeval<=1)){ *istop = 1; *iflag = 0; for(i=0;i=1) { for(i=0;i= 2 ){ for(i=0;i 0) { print_final(o,*iflag,tnow,tmax,eval,maxeval,n,m,me,&*x,&*bestg,&*bestf, &*xl,&*xu,&*rw,&*pf,acc,wres,param,&*iout); if(save2file > 0) { print_final(o,*iflag,tnow,tmax,eval,maxeval,n,m,me,&*x,&*bestg,&*bestf, &*xl,&*xu,&*rw,&*pf,acc,wres,param,&*iout1); print_final(o,*iflag,tnow,tmax,eval,maxeval,n,m,me,&*x,&*bestg,&*bestf, &*xl,&*xu,&*rw,&*pf,acc,wres,param,&*iout2); flush_output( &*iout1 ); flush_output( &*iout2 ); close_output( &*iout1 ); close_output( &*iout2 ); } } return 0; } } /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ return 0; } /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ /*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ int print_head(long int p, long int o, long int n, long int ni, long int m, long int me, double *param, long int maxeval, long int maxtime, long int printeval, long int save2file, char *key, FILE *iout) { int i, dummy; fprintf(iout,"\n MIDACO 6.0 (www.midaco-solver.com)"); fprintf(iout,"\n ----------------------------------\n\n"); fprintf(iout," LICENSE-KEY: ");for(i=0;i<=59;i++){fprintf(iout,"%c",key[i]);} fprintf(iout,"\n\n ----------------------------------------\n"); fprintf(iout," | OBJECTIVES%5li | PARALLEL%10li |\n",o,p); fprintf(iout," |--------------------------------------|\n"); fprintf(iout," | N%14li | MAXEVAL%11li |\n",n,maxeval); fprintf(iout," | NI%13li | MAXTIME%11li |\n",ni,maxtime); fprintf(iout," | M%14li | PRINTEVAL%9li |\n",m,printeval); fprintf(iout," | ME%13li | SAVE2FILE%9li |\n",me,save2file); fprintf(iout," |--------------------------------------|\n"); dummy = 0; for(i=0;i<13;i++){ if(param[i] != 0.0){ dummy=1;}} if(dummy == 0) { fprintf(iout," | PARAMETER: All by default (0) |\n"); } else { if(param[ 0]!=0.0){fprintf(iout," | PARAM[ 0] %14.7e ACCURACY |\n",param[ 0]);} if(param[ 1]!=0.0){fprintf(iout," | PARAM[ 1] %14.7e RANDOM-SEED |\n",param[ 1]);} if(param[ 2]!=0.0){fprintf(iout," | PARAM[ 2] %14.7e FSTOP |\n",param[ 2]);} if(param[ 3]!=0.0){fprintf(iout," | PARAM[ 3] %14.7e ALGOSTOP |\n",param[ 3]);} if(param[ 4]!=0.0){fprintf(iout," | PARAM[ 4] %14.7e EVALSTOP |\n",param[ 4]);} if(param[ 5]!=0.0){fprintf(iout," | PARAM[ 5] %14.7e FOCUS |\n",param[ 5]);} if(param[ 6]!=0.0){fprintf(iout," | PARAM[ 6] %14.7e ANTS |\n",param[ 6]);} if(param[ 7]!=0.0){fprintf(iout," | PARAM[ 7] %14.7e KERNEL |\n",param[ 7]);} if(param[ 8]!=0.0){fprintf(iout," | PARAM[ 8] %14.7e ORACLE |\n",param[ 8]);} if(param[ 9]!=0.0){fprintf(iout," | PARAM[ 9] %14.7e PARETOMAX |\n",param[ 9]);} if(param[10]!=0.0){fprintf(iout," | PARAM[10] %14.7e EPSILON |\n",param[10]);} if(param[11]!=0.0){fprintf(iout," | PARAM[11] %14.7e BALANCE |\n",param[11]);} if(param[12]!=0.0){fprintf(iout," | PARAM[12] %14.7e CHARACTER |\n",param[12]);} } fprintf(iout," ----------------------------------------\n\n"); if( o <= 1 ){ fprintf(iout," [ EVAL, TIME] OBJECTIVE FUNCTION VALUE VIOLATION OF G(X)\n"); fprintf(iout," ------------------------------------------------------------------------------\n"); } if( o >= 2 ){ fprintf(iout," [ EVAL, TIME] MULTI-OBJECTIVE PROGRESS VIOLATION OF G(X)\n"); fprintf(iout," ------------------------------------------------------------------- [PARETO]\n"); } return 0; } int print_line(long int o, long int eval, double tnow, double f, double vio, double *pf, FILE *iout) { long int psize; if( o >= 2 ){ psize = (long int)(pf[0]); } if(fabs(f) <= 1.0e+10) { if(vio <= 1.0e+5) { if( o <= 1 ){ fprintf(iout," [%9li,%8.0f] F(X):%19.8f VIO:%13.6f\n",eval,tnow,f,vio); } if( o >= 2 ){ fprintf(iout," [%9li,%8.0f] PRO:%20.8f VIO:%13.6f [%6li]\n",eval,tnow,f,vio,psize); } }else{ if( o <= 1 ){ fprintf(iout," [%9li,%8.0f] F(X):%19.8f VIO:%13.6e\n",eval,tnow,f,vio); } if( o >= 2 ){ fprintf(iout," [%9li,%8.0f] PRO:%20.8f VIO:%13.6e [%6li]\n",eval,tnow,f,vio,psize); } } }else{ if(vio <= 1.0e+5) { if( o <= 1 ){ fprintf(iout," [%9li,%8.0f] F(X):%19.8e VIO:%13.6f\n",eval,tnow,f,vio); } if( o >= 2 ){ fprintf(iout," [%9li,%8.0f] PRO:%20.8e VIO:%13.6f [%6li]\n",eval,tnow,f,vio,psize); } }else{ if( o <= 1 ){ fprintf(iout," [%9li,%8.0f] F(X):%19.8e VIO:%13.6e\n",eval,tnow,f,vio); } if( o >= 2 ){ fprintf(iout," [%9li,%8.0f] PRO:%20.8e VIO:%13.6e [%6li]\n",eval,tnow,f,vio,psize); } } } return 0; } int print_solution(long int o,long int n,long int m,long int me,double *x,double *g, double *f,double *vio,double *xl,double *xu, double acc, long int eval, double tnow,long int iflag, double *pf, FILE *iout) { int i,j,on,profil; long int psize; fprintf(iout,"\n --------------------------------------------\n"); fprintf(iout," EVAL:%10li, TIME:%8.2f, IFLAG:%4li \n",eval,tnow,iflag); fprintf(iout," --------------------------------------------\n"); if( o <= 1 ) { if(fabs(f[0]) <= 1.0e+18){ fprintf(iout," f[0] =%38.15f \n",f[0]); }else{ fprintf(iout," f[0] =%38.6e \n",f[0]); } fprintf(iout," --------------------------------------------\n"); } else { if(fabs(f[0]) <= 1.0e+18){ fprintf(iout," PROGRESS%36.15f \n",f[0]); }else{ fprintf(iout," PROGRESS%36.6e \n",f[0]); } fprintf(iout," --------------------------------------------\n"); psize = (long int)(pf[0]); fprintf(iout," NUMBER OF PARETO POINTS%21li \n",psize); fprintf(iout," --------------------------------------------\n"); for( i=0; i 0) { if(iflag < 100) { if(vio[0] <= 1.0e+12) { fprintf(iout," VIOLATION OF G(X)%27.12f\n",vio[0]); }else{ fprintf(iout," VIOLATION OF G(X)%27.6e\n",vio[0]); } fprintf(iout," --------------------------------------------\n"); } for( i=0; i= me) { if(g[i] > -acc) { if(fabs(g[i]) <= 1.0e+7){ fprintf(iout," g[%4i] =%16.8f (IN-EQUAL CONSTR)\n",i,g[i]); }else{ fprintf(iout," g[%4i] =%16.3e (IN-EQUAL CONSTR)\n",i,g[i]); } } else { if(fabs(g[i]) <= 1.0e+7){ fprintf(iout," g[%4i] =%16.8f (IN-EQUAL CONSTR) <--- INFEASIBLE ( G < 0 )\n",i,g[i]); }else{ fprintf(iout," g[%4i] =%16.3e (IN-EQUAL CONSTR) <--- INFEASIBLE ( G < 0 )\n",i,g[i]); } } } } fprintf(iout," -------------------------------------------- BOUNDS-PROFIL \n"); } for( i=0; i xu[i]+1.0e-6 )){ profil = 91; on = 0; } if((on==1)&&( x[i] < xl[i]-1.0e-6 )){ profil = 92; on = 0; } if((on==1)&&( xl[i] > xu[i] )){ profil = 93; on = 0; } if((on==1)&&( xl[i] == xu[i] )){ profil = 90; on = 0; } if((on==1)&&( fabs(x[i]-xl[i]) < (xu[i]-xl[i])/1000.0 )){ profil = 0; on = 0; } if((on==1)&&( fabs(xu[i]-x[i]) < (xu[i]-xl[i])/1000.0 )){ profil = 22; on = 0; } for( j=1; j<=21; j++) { if((on==1)&&( x[i] <= xl[i] + ((double) j) * (xu[i]-xl[i])/21.0 )){ profil = j; on = 0; } } if( fabs(x[i]) <= 1.0e+14 ) { if(profil == 0){fprintf(iout," x[%4i] =%34.15f; /* XL___________________ */\n",i,x[i]);} if(profil == 1){fprintf(iout," x[%4i] =%34.15f; /* x____________________ */\n",i,x[i]);} if(profil == 2){fprintf(iout," x[%4i] =%34.15f; /* _x___________________ */\n",i,x[i]);} if(profil == 3){fprintf(iout," x[%4i] =%34.15f; /* __x__________________ */\n",i,x[i]);} if(profil == 4){fprintf(iout," x[%4i] =%34.15f; /* ___x_________________ */\n",i,x[i]);} if(profil == 5){fprintf(iout," x[%4i] =%34.15f; /* ____x________________ */\n",i,x[i]);} if(profil == 6){fprintf(iout," x[%4i] =%34.15f; /* _____x_______________ */\n",i,x[i]);} if(profil == 7){fprintf(iout," x[%4i] =%34.15f; /* ______x______________ */\n",i,x[i]);} if(profil == 8){fprintf(iout," x[%4i] =%34.15f; /* _______x_____________ */\n",i,x[i]);} if(profil == 9){fprintf(iout," x[%4i] =%34.15f; /* ________x____________ */\n",i,x[i]);} if(profil ==10){fprintf(iout," x[%4i] =%34.15f; /* _________x___________ */\n",i,x[i]);} if(profil ==11){fprintf(iout," x[%4i] =%34.15f; /* __________x__________ */\n",i,x[i]);} if(profil ==12){fprintf(iout," x[%4i] =%34.15f; /* ___________x_________ */\n",i,x[i]);} if(profil ==13){fprintf(iout," x[%4i] =%34.15f; /* ____________x________ */\n",i,x[i]);} if(profil ==14){fprintf(iout," x[%4i] =%34.15f; /* _____________x_______ */\n",i,x[i]);} if(profil ==15){fprintf(iout," x[%4i] =%34.15f; /* ______________x______ */\n",i,x[i]);} if(profil ==16){fprintf(iout," x[%4i] =%34.15f; /* _______________x_____ */\n",i,x[i]);} if(profil ==17){fprintf(iout," x[%4i] =%34.15f; /* ________________x____ */\n",i,x[i]);} if(profil ==18){fprintf(iout," x[%4i] =%34.15f; /* _________________x___ */\n",i,x[i]);} if(profil ==19){fprintf(iout," x[%4i] =%34.15f; /* __________________x__ */\n",i,x[i]);} if(profil ==20){fprintf(iout," x[%4i] =%34.15f; /* ___________________x_ */\n",i,x[i]);} if(profil ==21){fprintf(iout," x[%4i] =%34.15f; /* ____________________x */\n",i,x[i]);} if(profil ==22){fprintf(iout," x[%4i] =%34.15f; /* ___________________XU */\n",i,x[i]);} if(profil ==90){fprintf(iout," x[%4i] =%34.15f; /* WARNING: XL = XU */\n",i,x[i]);} if(profil ==91){fprintf(iout," x[%4i] =%34.15f; ***ERROR*** (X > XU) \n",i,x[i]);} if(profil ==92){fprintf(iout," x[%4i] =%34.15f; ***ERROR*** (X < XL) \n",i,x[i]);} if(profil ==93){fprintf(iout," x[%4i] =%34.15f; ***ERROR*** (XL > XU) \n",i,x[i]);} if(profil < 0 ){fprintf(iout," PROFIL-ERROR");} }else{ if(profil == 0){fprintf(iout," x[%4i] =%34.1e; /* XL___________________ */\n",i,x[i]);} if(profil == 1){fprintf(iout," x[%4i] =%34.1e; /* x____________________ */\n",i,x[i]);} if(profil == 2){fprintf(iout," x[%4i] =%34.1e; /* _x___________________ */\n",i,x[i]);} if(profil == 3){fprintf(iout," x[%4i] =%34.1e; /* __x__________________ */\n",i,x[i]);} if(profil == 4){fprintf(iout," x[%4i] =%34.1e; /* ___x_________________ */\n",i,x[i]);} if(profil == 5){fprintf(iout," x[%4i] =%34.1e; /* ____x________________ */\n",i,x[i]);} if(profil == 6){fprintf(iout," x[%4i] =%34.1e; /* _____x_______________ */\n",i,x[i]);} if(profil == 7){fprintf(iout," x[%4i] =%34.1e; /* ______x______________ */\n",i,x[i]);} if(profil == 8){fprintf(iout," x[%4i] =%34.1e; /* _______x_____________ */\n",i,x[i]);} if(profil == 9){fprintf(iout," x[%4i] =%34.1e; /* ________x____________ */\n",i,x[i]);} if(profil ==10){fprintf(iout," x[%4i] =%34.1e; /* _________x___________ */\n",i,x[i]);} if(profil ==11){fprintf(iout," x[%4i] =%34.1e; /* __________x__________ */\n",i,x[i]);} if(profil ==12){fprintf(iout," x[%4i] =%34.1e; /* ___________x_________ */\n",i,x[i]);} if(profil ==13){fprintf(iout," x[%4i] =%34.1e; /* ____________x________ */\n",i,x[i]);} if(profil ==14){fprintf(iout," x[%4i] =%34.1e; /* _____________x_______ */\n",i,x[i]);} if(profil ==15){fprintf(iout," x[%4i] =%34.1e; /* ______________x______ */\n",i,x[i]);} if(profil ==16){fprintf(iout," x[%4i] =%34.1e; /* _______________x_____ */\n",i,x[i]);} if(profil ==17){fprintf(iout," x[%4i] =%34.1e; /* ________________x____ */\n",i,x[i]);} if(profil ==18){fprintf(iout," x[%4i] =%34.1e; /* _________________x___ */\n",i,x[i]);} if(profil ==19){fprintf(iout," x[%4i] =%34.1e; /* __________________x__ */\n",i,x[i]);} if(profil ==20){fprintf(iout," x[%4i] =%34.1e; /* ___________________x_ */\n",i,x[i]);} if(profil ==21){fprintf(iout," x[%4i] =%34.1e; /* ____________________x */\n",i,x[i]);} if(profil ==22){fprintf(iout," x[%4i] =%34.1e; /* ___________________XU */\n",i,x[i]);} if(profil ==90){fprintf(iout," x[%4i] =%34.1e; /* WARNING: XL = XU */\n",i,x[i]);} if(profil ==91){fprintf(iout," x[%4i] =%34.1e; ***ERROR*** (X > XU) \n",i,x[i]);} if(profil ==92){fprintf(iout," x[%4i] =%34.1e; ***ERROR*** (X < XL) \n",i,x[i]);} if(profil ==93){fprintf(iout," x[%4i] =%34.1e; ***ERROR*** (XL > XU) \n",i,x[i]);} if(profil < 0 ){fprintf(iout," PROFIL-ERROR");} } } fprintf(iout," \n "); return 0; } int print_final(long int o, long int iflag, double tnow, double tmax, long int eval, long int maxeval, long int n, long int m, long int me, double *x, double *g, double *f, double *xl, double *xu, double *rw, double *pf, double acc, long int wres, double *param, FILE *iout) { double vio[1]; vio[0] = rw[wres]; if((iflag == 1)||(iflag == 2)) { if(tnow >= tmax){ fprintf(iout,"\n OPTIMIZATION FINISHED ---> MAXTIME REACHED");} if(eval >= maxeval){ fprintf(iout,"\n OPTIMIZATION FINISHED ---> MAXEVAL REACHED");} } if((iflag == 3)||(iflag == 4)) { fprintf(iout,"\n OPTIMIZATION FINISHED ---> ALGOSTOP (=%3li)",(long int)param[3]); } if((iflag == 5)||(iflag == 6)) { fprintf(iout,"\n OPTIMIZATION FINISHED ---> EVALSTOP (=%9li)",(long int)param[4]); } if(iflag == 7) { fprintf(iout,"\n OPTIMIZATION FINISHED ---> FSTOP REACHED"); } fprintf(iout,"\n\n\n BEST SOLUTION FOUND BY MIDACO"); print_solution( o, n, m, me, &*x, &*g, &*f, &*vio, &*xl, &*xu, acc,eval, tnow, iflag, &*pf, &*iout); return 0; } int warnings_and_erros( long int *iflag, FILE *iout ) { if(*iflag < 100) { fprintf(iout,"\n *** WARNING *** ( IFLAG =%6li )\n\n", *iflag); } else { fprintf(iout,"\n *** MIDACO INPUT ERROR *** ( IFLAG =%6li )\n\n", *iflag); } return 0; } int print_paretofront(long int o, long int m, long int n, double *pf, double *x, double *g, int pfmax) { long int psize = (long int)(pf[0]); int i,k; double dummy; static FILE* iout3; /* MIDADCO_PARETOFRONT.TXT */ /* iout3 = open_file( &*iout3, "MIDACO_PARETOFRONT.tmp"); */ iout3 = open_file( &*iout3, "MIDACO_PARETOFRONT.TXT"); fprintf(iout3,"#########################################################\n"); fprintf(iout3,"### This file contains the pareto front approximation ###\n"); fprintf(iout3,"#########################################################\n"); fprintf(iout3,"### Solution format: F(1:O) G(1:M) X(1:N) ###\n"); fprintf(iout3,"#########################################################\n"); fprintf(iout3,"#\n"); fprintf(iout3,"# O M N PSIZE\n"); fprintf(iout3,"#\n"); fprintf(iout3," %9li %9li %9li %9li \n", o, m, n, psize); fprintf(iout3,"#\n"); fprintf(iout3,"# MIDACO solution\n"); fprintf(iout3,"#\n"); for( i=0; i 0.0 ){ dummy = -dummy; } if( dummy <= 1.0e+9){ fprintf(iout3,"%19.7f ",dummy); } else{ fprintf(iout3,"%16.5e ",dummy); } } for( i=0; i= 1 ){ dummy = f[i]; } if( dummy <= 1.0e+9){ fprintf(iout,"%19.7f ",dummy); } else{ fprintf(iout,"%16.5e ",dummy); } } for( i=0; i= 1 ){ dummy = g[i]; } if( dummy <= 1.0e+9){ fprintf(iout,"%19.7f ",dummy); } else{ fprintf(iout,"%16.5e ",dummy); } } for( i=0; i= 1 ){ dummy = x[i]; } if( dummy <= 1.0e+9){ fprintf(iout,"%19.7f ",dummy); } else{ fprintf(iout,"%16.5e ",dummy); } } fprintf(iout,"\n"); /* linebreak */ } } } for( k=1; k<=P; k++) { for( i=0; i= 1){ close_output( iout ); } return 0; } /* END OF FILE */