#include <stdlib.h>
/* autlib3.f -- translated by f2c (version of 28 December 1990 16:16:33).
You must link the resulting object file with the libraries:
-lF77 -lI77 -lm -lc (in that order)
*/
#include "f2c.h"
#include "autlim.h"
/* Common Block Declarations */
typedef struct {
int irot;
int nrot[1000];
double torper;
} ROTCHK;
extern ROTCHK blrtn;
struct {
integer ndm, ndmp1, nrow, nclm, nrc, ncc, npar, nfpar, nbc0, nint0;
} blicn_;
#define blicn_1 blicn_
struct {
integer npr, mxbf, iid, itmx, itnw, nwtn, jac;
} blmax_;
#define blmax_1 blmax_
struct {
doublereal half, zero, one, two, hmach, rsmall, rlarge;
} blrcn_;
#define blrcn_1 blrcn_
struct {
doublereal u0xx[N3AUTO], u1xx[N3AUTO], u2xx[N3AUTO], f1xx[N3AUTO], f2xx[N3AUTO], dfuxx[NFAUTO]
/* was [50][120] */, dfpxx[NPAUTO] /* was [50][
20] */, dduxx[NAUTO], ddpxx[20];
} blwif_;
#define blwif_1 blwif_
struct {
integer ndim, ips, irs, ilp, icp[20];
doublereal par[20];
} blbcn_;
#define blbcn_1 blbcn_
struct {
doublereal rdsold, a, rl[20], rlold[20], rldot[20];
} blcrl_;
#define blcrl_1 blcrl_
struct {
integer ntst, ncol, iad, isp, isw, iplt, nbc, nint;
} blcde_;
#define blcde_1 blcde_
struct {
integer nmx, nuzr;
doublereal rl0, rl1, a0, a1;
} bllim_;
#define bllim_1 bllim_
struct {
doublereal ds, dsmin, dsmax;
integer iads;
} bldls_;
#define bldls_1 bldls_
struct {
doublereal u1zz[NAUTO], u2zz[NAUTO], f1zz[NAUTO], f2zz[NAUTO];
} bldif_;
#define bldif_1 bldif_
/* Table of constant values */
static integer c__1 = 1;
static integer c__0 = 0;
static integer c__2 = 2;
static integer c__3 = 3;
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Subroutines for the Continuation of Limit Points (Algebraic Problems) */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int fnlp_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int fflp_();
static integer i, j;
static doublereal ep, umx;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates the equations for the 2-par continuation of limit points. */
/* Generate the function. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
fflp_(ndim, &u[1], uold, &icp[1], &par[1], &f[1], &blicn_1.ndm,
blwif_1.dfuxx, blwif_1.dfpxx);
if (*ijac == 0) {
return 0;
}
/* Generate the Jacobian. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u[i], abs(d__1)) > umx) {
umx = (d__2 = u[i], abs(d__2));
}
/* SGLE IF( ABS(U(I)).GT.UMX)UMX= ABS(U(I)) */
/* L1: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
blwif_1.u1xx[j - 1] = u[j];
blwif_1.u2xx[j - 1] = u[j];
/* L2: */
}
blwif_1.u1xx[i - 1] -= ep;
blwif_1.u2xx[i - 1] += ep;
fflp_(ndim, blwif_1.u1xx, uold, &icp[1], &par[1], blwif_1.f1xx, &
blicn_1.ndm, blwif_1.dfuxx, blwif_1.dfpxx);
fflp_(ndim, blwif_1.u2xx, uold, &icp[1], &par[1], blwif_1.f2xx, &
blicn_1.ndm, blwif_1.dfuxx, blwif_1.dfpxx);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[j + i * dfdu_dim1] = (blwif_1.f2xx[j - 1] - blwif_1.f1xx[j -
1]) / (ep * 2);
/* L3: */
}
/* L4: */
}
par[icp[1]] += ep;
fflp_(ndim, &u[1], uold, &icp[1], &par[1], blwif_1.f1xx, &blicn_1.ndm,
blwif_1.dfuxx, blwif_1.dfpxx);
i__1 = *ndim;
for (j = 1; j <= i__1; ++j) {
dfdp[j + icp[1] * dfdp_dim1] = (blwif_1.f1xx[j - 1] - f[j]) / ep;
/* L5: */
}
par[icp[1]] -= ep;
return 0;
} /* fnlp_ */
/* ---------- ---- */
/* Subroutine */ int fflp_(ndim1, u, uold, icp1, par1, f, ndm, dfdu, dfdp)
integer *ndim1;
doublereal *u, *uold;
integer *icp1;
doublereal *par1, *f;
integer *ndm;
doublereal *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
static integer ijac;
extern /* Subroutine */ int fnds_(), funi_();
static integer i, j;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dfdp_dim1 = *ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--u;
/* Function Body */
ijac = 1;
blbcn_1.par[blbcn_1.icp[1] - 1] = u[blbcn_1.ndim];
if (blbcn_1.ips == -1) {
fnds_(ndm, &u[1], uold, blbcn_1.icp, blbcn_1.par, &ijac, &f[1], &dfdu[
dfdu_offset], &dfdp[dfdp_offset]);
} else {
funi_(ndm, &u[1], uold, blbcn_1.icp, blbcn_1.par, &ijac, &f[1], &dfdu[
dfdu_offset], &dfdp[dfdp_offset]);
}
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndm + i] = blrcn_1.zero;
i__2 = *ndm;
for (j = 1; j <= i__2; ++j) {
f[*ndm + i] += dfdu[i + j * dfdu_dim1] * u[*ndm + j];
/* L1: */
}
/* L2: */
}
f[blbcn_1.ndim] = -blrcn_1.one;
/* SGLE F(NDIM)=-ONE */
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[blbcn_1.ndim] += u[*ndm + i] * u[*ndm + i];
/* L3: */
}
return 0;
} /* fflp_ */
/* ---------- ------ */
/* Subroutine */ int stpnlp_(ibr, u, ndm2, smat, dfdu, dfuxx, dfdp, v, f, ir,
ic)
integer *ibr;
doublereal *u;
integer *ndm2;
doublereal *smat, *dfdu, *dfuxx, *dfdp, *v, *f;
integer *ir, *ic;
{
/* System generated locals */
integer smat_dim1, smat_offset, dfdu_dim1, dfdu_offset, dfuxx_dim1,
dfuxx_offset, dfdp_dim1, dfdp_offset, i__1;
/* Local variables */
static integer ijac;
extern /* Subroutine */ int fnds_(), funi_(), nlvc_();
static doublereal uold;
static integer i;
static logical found;
extern /* Subroutine */ int nrmlz_(), readl3_(), findl3_();
static integer nfpar1, itp;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates starting data for the continuation of limit points. */
/* Parameter adjustments */
--ic;
--ir;
--f;
--v;
dfdp_dim1 = blicn_1.ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfuxx_dim1 = blicn_1.ndmp1;
dfuxx_offset = dfuxx_dim1 + 1;
dfuxx -= dfuxx_offset;
dfdu_dim1 = blicn_1.ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
smat_dim1 = *ndm2;
smat_offset = smat_dim1 + 1;
smat -= smat_offset;
--u;
/* Function Body */
findl3_(&blbcn_1.irs, &itp, &nfpar1, &found);
readl3_(&blbcn_1.ips, ibr, &u[1], blbcn_1.par);
ijac = 1;
if (blbcn_1.ips == -1) {
fnds_(&blicn_1.ndm, &u[1], &uold, blbcn_1.icp, blbcn_1.par, &ijac, &f[
1], &dfdu[dfdu_offset], &dfdp[dfdp_offset]);
} else {
funi_(&blicn_1.ndm, &u[1], &uold, blbcn_1.icp, blbcn_1.par, &ijac, &f[
1], &dfdu[dfdu_offset], &dfdp[dfdp_offset]);
}
nlvc_(&blicn_1.ndm, &blicn_1.ndm, &c__1, &dfdu[dfdu_offset], &v[1], &ir[1]
, &ic[1]);
nrmlz_(&blicn_1.ndm, &v[1]);
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
u[blicn_1.ndm + i] = v[i];
/* L1: */
}
u[blbcn_1.ndim] = blbcn_1.par[blbcn_1.icp[1] - 1];
return 0;
} /* stpnlp_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Subroutines for the Optimization of Algebraic Systems */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int fnc1_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1;
/* Local variables */
extern /* Subroutine */ int fopi_(), funi_();
static integer i, j;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generate the equations for the continuation scheme used for */
/* the optimization of algebraic systems (one parameter). */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
par[icp[2]] = u[*ndim];
funi_(&blicn_1.ndm, &u[1], uold, &icp[1], &par[1], ijac, &f[1], &dfdu[
dfdu_offset], &dfdp[dfdp_offset]);
/* Rearrange (Since dimensions in FNC1 and FUNI differ). */
if (*ijac != 0) {
for (j = blicn_1.ndm; j >= 1; --j) {
for (i = blicn_1.ndm; i >= 1; --i) {
dfdu[i + j * dfdu_dim1] = dfdu[(j - 1) * blicn_1.ndm + i +
dfdu_dim1];
/* L1: */
}
/* L2: */
}
for (j = blicn_1.npar; j >= 1; --j) {
for (i = blicn_1.ndm; i >= 1; --i) {
dfdp[i + j * dfdp_dim1] = dfdp[(j - 1) * blicn_1.ndm + i +
dfdp_dim1];
/* L3: */
}
/* L4: */
}
}
fopi_(&blicn_1.ndm, &u[1], &icp[1], &par[1], ijac, &f[*ndim],
blwif_1.dduxx, blwif_1.ddpxx);
f[*ndim] = par[icp[1]] - f[*ndim];
if (*ijac != 0) {
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
dfdu[*ndim + i * dfdu_dim1] = -blwif_1.dduxx[i - 1];
dfdu[i + *ndim * dfdu_dim1] = dfdp[i + icp[2] * dfdp_dim1];
dfdp[i + icp[1] * dfdp_dim1] = 0.;
/* L5: */
}
dfdu[*ndim + *ndim * dfdu_dim1] = -blwif_1.ddpxx[icp[2] - 1];
dfdp[*ndim + icp[1] * dfdp_dim1] = 1.;
}
return 0;
} /* fnc1_ */
/* ---------- ------ */
/* Subroutine */ int stpnc1_(ibr, u, ndm2, smat, dfdu, dfuxx, dfdp, v, f, ir,
ic)
integer *ibr;
doublereal *u;
integer *ndm2;
doublereal *smat, *dfdu, *dfuxx, *dfdp, *v, *f;
integer *ir, *ic;
{
/* System generated locals */
integer smat_dim1, smat_offset, dfdu_dim1, dfdu_offset, dfuxx_dim1,
dfuxx_offset, dfdp_dim1, dfdp_offset;
/* Local variables */
extern /* Subroutine */ int fopi_(), stpnt_();
static doublereal fop;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generate starting data for optimization problems (one parameter). */
/* Parameter adjustments */
--ic;
--ir;
--f;
--v;
dfdp_dim1 = blicn_1.ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfuxx_dim1 = blicn_1.ndmp1;
dfuxx_offset = dfuxx_dim1 + 1;
dfuxx -= dfuxx_offset;
dfdu_dim1 = blicn_1.ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
smat_dim1 = *ndm2;
smat_offset = smat_dim1 + 1;
smat -= smat_offset;
--u;
/* Function Body */
stpnt_(&blbcn_1.ndim, &u[1], blbcn_1.par);
fopi_(&blicn_1.ndm, &u[1], blbcn_1.icp, blbcn_1.par, &c__0, &fop, &dfdu[
dfdu_offset], &dfdp[dfdp_offset]);
blbcn_1.par[blbcn_1.icp[0] - 1] = fop;
u[blbcn_1.ndim] = blbcn_1.par[blbcn_1.icp[1] - 1];
return 0;
} /* stpnc1_ */
/* ---------- ---- */
/* Subroutine */ int fnc2_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
static integer i, j;
static doublereal ep, umx;
extern /* Subroutine */ int ffc2_();
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generate the equations for the continuation scheme used for the */
/* optimization of algebraic systems (more than one parameter). */
/* Generate the function. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
ffc2_(ndim, &u[1], uold, &icp[1], &par[1], &f[1], blwif_1.dfuxx,
blwif_1.dfpxx);
if (*ijac == 0) {
return 0;
}
/* Generate the Jacobian. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u[i], abs(d__1)) > umx) {
umx = (d__2 = u[i], abs(d__2));
}
/* SGLE IF( ABS(U(I)).GT.UMX)UMX= ABS(U(I)) */
/* L1: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
blwif_1.u1xx[j - 1] = u[j];
blwif_1.u2xx[j - 1] = u[j];
/* L2: */
}
blwif_1.u1xx[i - 1] -= ep;
blwif_1.u2xx[i - 1] += ep;
ffc2_(ndim, blwif_1.u1xx, uold, &icp[1], &par[1], blwif_1.f1xx,
blwif_1.dfuxx, blwif_1.dfpxx);
ffc2_(ndim, blwif_1.u2xx, uold, &icp[1], &par[1], blwif_1.f2xx,
blwif_1.dfuxx, blwif_1.dfpxx);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[j + i * dfdu_dim1] = (blwif_1.f2xx[j - 1] - blwif_1.f1xx[j -
1]) / (ep * 2);
/* L3: */
}
/* L4: */
}
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
dfdp[i + icp[1] * dfdp_dim1] = 0.;
/* L5: */
}
dfdp[*ndim + icp[1] * dfdp_dim1] = 1.;
return 0;
} /* fnc2_ */
/* ---------- ---- */
/* Subroutine */ int ffc2_(ndim, u, uold, icp, par, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par, *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
static integer ijac, icpm;
extern /* Subroutine */ int fopi_(), funi_();
static integer i, j;
static doublereal fop;
static integer ndm2;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dfdp_dim1 = blicn_1.ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = blicn_1.ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
ijac = 1;
i__1 = blicn_1.nfpar;
for (i = 2; i <= i__1; ++i) {
par[icp[i]] = u[(blicn_1.ndm << 1) + i];
/* L1: */
}
funi_(&blicn_1.ndm, &u[1], uold, &icp[1], &par[1], &ijac, &f[1], &dfdu[
dfdu_offset], &dfdp[dfdp_offset]);
fopi_(&blicn_1.ndm, &u[1], &icp[1], &par[1], &ijac, &fop, blwif_1.dduxx,
blwif_1.ddpxx);
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
f[blicn_1.ndm + i] = blwif_1.dduxx[i - 1] * u[(blicn_1.ndm << 1) + 1];
i__2 = blicn_1.ndm;
for (j = 1; j <= i__2; ++j) {
f[blicn_1.ndm + i] += dfdu[j + i * dfdu_dim1] * u[blicn_1.ndm + j]
;
/* L2: */
}
/* L3: */
}
ndm2 = blicn_1.ndm << 1;
icpm = blicn_1.nfpar - 2;
i__1 = icpm;
for (i = 1; i <= i__1; ++i) {
f[ndm2 + i] = blwif_1.ddpxx[icp[i + 1] - 1] * u[ndm2 + 1];
/* L4: */
}
i__1 = icpm;
for (i = 1; i <= i__1; ++i) {
i__2 = blicn_1.ndm;
for (j = 1; j <= i__2; ++j) {
f[ndm2 + i] += u[blicn_1.ndm + j] * dfdp[j + icp[i + 1] *
dfdp_dim1];
/* L5: */
}
/* L6: */
}
f[*ndim - 1] = u[ndm2 + 1] * u[ndm2 + 1] - 1;
i__1 = blicn_1.ndm;
for (j = 1; j <= i__1; ++j) {
f[*ndim - 1] += u[blicn_1.ndm + j] * u[blicn_1.ndm + j];
/* L7: */
}
f[*ndim] = par[icp[1]] - fop;
return 0;
} /* ffc2_ */
/* ---------- ------ */
/* Subroutine */ int stpnc2_(ibr, u, ndm2, smat, dfdu, dfu, dfdp, v, f, ir,
ic)
integer *ibr;
doublereal *u;
integer *ndm2;
doublereal *smat, *dfdu, *dfu, *dfdp, *v, *f;
integer *ir, *ic;
{
/* System generated locals */
integer smat_dim1, smat_offset, dfdu_dim1, dfdu_offset, dfu_dim1,
dfu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
static integer ijac;
extern /* Subroutine */ int fopi_(), funi_(), nlvc_();
static doublereal uold;
static integer i, j;
static logical found;
extern /* Subroutine */ int nrmlz_(), readl3_(), findl3_();
static doublereal fop;
static integer itp;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates starting data for the continuation equations for */
/* optimization of algebraic systems (More than one parameter). */
/* Parameter adjustments */
--ic;
--ir;
--f;
--v;
dfdp_dim1 = blicn_1.ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfu_dim1 = blicn_1.ndmp1;
dfu_offset = dfu_dim1 + 1;
dfu -= dfu_offset;
dfdu_dim1 = blicn_1.ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
smat_dim1 = *ndm2;
smat_offset = smat_dim1 + 1;
smat -= smat_offset;
--u;
/* Function Body */
findl3_(&blbcn_1.irs, &itp, &blicn_1.nfpar, &found);
++blicn_1.nfpar;
readl3_(&blbcn_1.ips, ibr, &u[1], blbcn_1.par);
if (blicn_1.nfpar == 3) {
ijac = 1;
funi_(&blicn_1.ndm, &u[1], &uold, blbcn_1.icp, blbcn_1.par, &ijac, &f[
1], &dfdu[dfdu_offset], &dfdp[dfdp_offset]);
fopi_(&blicn_1.ndm, &u[1], blbcn_1.icp, blbcn_1.par, &ijac, &fop,
blwif_1.dduxx, blwif_1.ddpxx);
/* TRANSPOSE */
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
i__2 = blicn_1.ndm;
for (j = 1; j <= i__2; ++j) {
dfu[i + j * dfu_dim1] = dfdu[j + i * dfdu_dim1];
/* L1: */
}
/* L2: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
dfu[i + blicn_1.ndmp1 * dfu_dim1] = blwif_1.dduxx[i - 1];
dfu[blicn_1.ndmp1 + i * dfu_dim1] = dfdp[i + blbcn_1.icp[1] *
dfdp_dim1];
/* L3: */
}
dfu[blicn_1.ndmp1 + blicn_1.ndmp1 * dfu_dim1] = blwif_1.ddpxx[
blbcn_1.icp[1] - 1];
nlvc_(&blicn_1.ndmp1, &blicn_1.ndmp1, &c__1, &dfu[dfu_offset], &v[1],
&ir[1], &ic[1]);
nrmlz_(&blicn_1.ndmp1, &v[1]);
i__1 = blicn_1.ndmp1;
for (i = 1; i <= i__1; ++i) {
u[blicn_1.ndm + i] = v[i];
/* L4: */
}
blbcn_1.par[blbcn_1.icp[0] - 1] = fop;
}
i__1 = blicn_1.nfpar - 1;
for (i = 1; i <= i__1; ++i) {
u[blbcn_1.ndim - blicn_1.nfpar + 1 + i] = blbcn_1.par[blbcn_1.icp[i]
- 1];
/* L5: */
}
return 0;
} /* stpnc2_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Subroutines for Discrete Dynamical Systems */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int fnds_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1;
/* Local variables */
extern /* Subroutine */ int funi_();
static integer i;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generate the equations for continuing fixed points. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
funi_(ndim, &u[1], uold, &icp[1], &par[1], ijac, &f[1], &dfdu[dfdu_offset]
, &dfdp[dfdp_offset]);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
f[i] -= u[i];
/* L1: */
}
if (*ijac == 0) {
return 0;
}
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
dfdu[i + i * dfdu_dim1] -= blrcn_1.one;
/* L2: */
}
return 0;
} /* fnds_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Subroutines for the Continuation of Hopf Bifurcation Points (Maps) */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int fnhd_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int ffhd_();
static integer i, j;
static doublereal ep, umx;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates the equations for the 2-parameter continuation of Hopf */
/* bifurcation points for maps. */
/* Generate the function. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--uold;
--u;
/* Function Body */
ffhd_(ndim, &u[1], &uold[1], &icp[1], &par[1], &f[1], &blicn_1.ndm,
blwif_1.dfuxx, blwif_1.dfpxx);
if (*ijac == 0) {
return 0;
}
/* Generate the Jacobian. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u[i], abs(d__1)) > umx) {
umx = (d__2 = u[i], abs(d__2));
}
/* SGLE IF( ABS(U(I)).GT.UMX)UMX= ABS(U(I)) */
/* L2: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
blwif_1.u1xx[j - 1] = u[j];
blwif_1.u2xx[j - 1] = u[j];
/* L3: */
}
blwif_1.u1xx[i - 1] -= ep;
blwif_1.u2xx[i - 1] += ep;
ffhd_(ndim, blwif_1.u1xx, &uold[1], &icp[1], &par[1], blwif_1.f1xx, &
blicn_1.ndm, blwif_1.dfuxx, blwif_1.dfpxx);
ffhd_(ndim, blwif_1.u2xx, &uold[1], &icp[1], &par[1], blwif_1.f2xx, &
blicn_1.ndm, blwif_1.dfuxx, blwif_1.dfpxx);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[j + i * dfdu_dim1] = (blwif_1.f2xx[j - 1] - blwif_1.f1xx[j -
1]) / (ep * 2);
/* L4: */
}
/* L5: */
}
par[icp[1]] += ep;
ffhd_(ndim, &u[1], &uold[1], &icp[1], &par[1], blwif_1.f1xx, &blicn_1.ndm,
blwif_1.dfuxx, blwif_1.dfpxx);
i__1 = *ndim;
for (j = 1; j <= i__1; ++j) {
dfdp[j + icp[1] * dfdp_dim1] = (blwif_1.f1xx[j - 1] - f[j]) / ep;
/* L6: */
}
par[icp[1]] -= ep;
return 0;
} /* fnhd_ */
/* ---------- ---- */
/* Subroutine */ int ffhd_(ndim, u, uold, icp, par, f, ndm, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par, *f;
integer *ndm;
doublereal *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Builtin functions */
double sin(), cos();
/* Local variables */
static integer ijac;
extern /* Subroutine */ int funi_();
static integer i, j;
static doublereal theta, c1, s1;
static integer ndm2;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dfdp_dim1 = *ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--uold;
--u;
/* Function Body */
ndm2 = *ndm << 1;
theta = u[*ndim - 1];
s1 = sin(theta);
/* SGLE S1= SIN(THETA) */
c1 = cos(theta);
/* SGLE C1= COS(THETA) */
par[icp[2]] = u[*ndim];
ijac = 1;
funi_(ndm, &u[1], &uold[1], &icp[1], &par[1], &ijac, &f[1], &dfdu[
dfdu_offset], &dfdp[dfdp_offset]);
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[i] -= u[i];
dfdu[i + i * dfdu_dim1] -= c1;
/* L1: */
}
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndm + i] = s1 * u[ndm2 + i];
f[ndm2 + i] = -s1 * u[*ndm + i];
i__2 = *ndm;
for (j = 1; j <= i__2; ++j) {
f[*ndm + i] += dfdu[i + j * dfdu_dim1] * u[*ndm + j];
f[ndm2 + i] += dfdu[i + j * dfdu_dim1] * u[ndm2 + j];
/* L2: */
}
/* L3: */
}
f[*ndim - 1] = -blrcn_1.one;
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndim - 1] = f[*ndim - 1] + u[*ndm + i] * u[*ndm + i] + u[ndm2 + i]
* u[ndm2 + i];
/* L4: */
}
f[*ndim] = blrcn_1.zero;
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndim] = f[*ndim] + uold[ndm2 + i] * u[*ndm + i] - uold[*ndm + i] *
u[ndm2 + i];
/* L5: */
}
return 0;
} /* ffhd_ */
/* ---------- ------ */
/* Subroutine */ int stpnhd_(ibr, u, ndm2, smat, dfdu, dfuxx, dfdp, v, f, ir,
ic)
integer *ibr;
doublereal *u;
integer *ndm2;
doublereal *smat, *dfdu, *dfuxx, *dfdp, *v, *f;
integer *ir, *ic;
{
/* System generated locals */
integer smat_dim1, smat_offset, dfdu_dim1, dfdu_offset, dfuxx_dim1,
dfuxx_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Builtin functions */
double sin(), cos();
/* Local variables */
static integer ijac;
extern /* Subroutine */ int funi_(), nlvc_();
static doublereal uold;
static integer i, j;
static doublereal theta;
static logical found;
static doublereal c1;
extern /* Subroutine */ int nrmlz_();
static doublereal s1;
extern /* Subroutine */ int readl3_(), findl3_();
static integer nfpar1;
extern doublereal pi_();
static integer itp;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates starting data for the continuation of Hopf bifurcation */
/* points for maps. */
/* Parameter adjustments */
--ic;
--ir;
--f;
--v;
dfdp_dim1 = blicn_1.ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfuxx_dim1 = blicn_1.ndmp1;
dfuxx_offset = dfuxx_dim1 + 1;
dfuxx -= dfuxx_offset;
dfdu_dim1 = blicn_1.ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
smat_dim1 = *ndm2;
smat_offset = smat_dim1 + 1;
smat -= smat_offset;
--u;
/* Function Body */
findl3_(&blbcn_1.irs, &itp, &nfpar1, &found);
readl3_(&blbcn_1.ips, ibr, &u[1], blbcn_1.par);
theta = pi_(&blrcn_1.two) / blbcn_1.par[10];
s1 = sin(theta);
/* SGLE S1= SIN(THETA) */
c1 = cos(theta);
/* SGLE C1= COS(THETA) */
ijac = 1;
funi_(&blicn_1.ndm, &u[1], &uold, blbcn_1.icp, blbcn_1.par, &ijac, &f[1],
&dfdu[dfdu_offset], &dfdp[dfdp_offset]);
*ndm2 = blicn_1.ndm << 1;
i__1 = *ndm2;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndm2;
for (j = 1; j <= i__2; ++j) {
smat[i + j * smat_dim1] = blrcn_1.zero;
/* L1: */
}
/* L2: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
smat[i + (blicn_1.ndm + i) * smat_dim1] = s1;
/* L3: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
smat[blicn_1.ndm + i + i * smat_dim1] = -s1;
/* L4: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
i__2 = blicn_1.ndm;
for (j = 1; j <= i__2; ++j) {
smat[i + j * smat_dim1] = dfdu[i + j * dfdu_dim1];
smat[blicn_1.ndm + i + (blicn_1.ndm + j) * smat_dim1] = dfdu[i +
j * dfdu_dim1];
/* L5: */
}
smat[i + i * smat_dim1] -= c1;
smat[blicn_1.ndm + i + (blicn_1.ndm + i) * smat_dim1] -= c1;
/* L6: */
}
nlvc_(ndm2, ndm2, &c__2, &smat[smat_offset], &v[1], &ir[1], &ic[1]);
nrmlz_(ndm2, &v[1]);
i__1 = *ndm2;
for (i = 1; i <= i__1; ++i) {
u[blicn_1.ndm + i] = v[i];
/* L7: */
}
u[blbcn_1.ndim - 1] = theta;
u[blbcn_1.ndim] = blbcn_1.par[blbcn_1.icp[1] - 1];
return 0;
} /* stpnhd_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Subroutines for the Continuation of Hopf Bifurcation Points (ODE) */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int fnhb_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int ffhb_();
static integer i, j;
static doublereal ep, umx;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates the equations for the 2-parameter continuation of Hopf */
/* bifurcation points in ODE. */
/* Generate the function. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--uold;
--u;
/* Function Body */
ffhb_(ndim, &u[1], &uold[1], &icp[1], &par[1], &f[1], &blicn_1.ndm,
blwif_1.dfuxx, blwif_1.dfpxx);
if (*ijac == 0) {
return 0;
}
/* Generate the Jacobian. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u[i], abs(d__1)) > umx) {
umx = (d__2 = u[i], abs(d__2));
}
/* SGLE IF( ABS(U(I)).GT.UMX)UMX= ABS(U(I)) */
/* L2: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
blwif_1.u1xx[j - 1] = u[j];
blwif_1.u2xx[j - 1] = u[j];
/* L3: */
}
blwif_1.u1xx[i - 1] -= ep;
blwif_1.u2xx[i - 1] += ep;
ffhb_(ndim, blwif_1.u1xx, &uold[1], &icp[1], &par[1], blwif_1.f1xx, &
blicn_1.ndm, blwif_1.dfuxx, blwif_1.dfpxx);
ffhb_(ndim, blwif_1.u2xx, &uold[1], &icp[1], &par[1], blwif_1.f2xx, &
blicn_1.ndm, blwif_1.dfuxx, blwif_1.dfpxx);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[j + i * dfdu_dim1] = (blwif_1.f2xx[j - 1] - blwif_1.f1xx[j -
1]) / (ep * 2);
/* L4: */
}
/* L5: */
}
par[icp[1]] += ep;
ffhb_(ndim, &u[1], &uold[1], &icp[1], &par[1], blwif_1.f1xx, &blicn_1.ndm,
blwif_1.dfuxx, blwif_1.dfpxx);
i__1 = *ndim;
for (j = 1; j <= i__1; ++j) {
dfdp[j + icp[1] * dfdp_dim1] = (blwif_1.f1xx[j - 1] - f[j]) / ep;
/* L6: */
}
par[icp[1]] -= ep;
return 0;
} /* fnhb_ */
/* ---------- ---- */
/* Subroutine */ int ffhb_(ndim, u, uold, icp, par, f, ndm, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par, *f;
integer *ndm;
doublereal *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
static integer ijac;
extern /* Subroutine */ int funi_();
static integer i, j;
extern doublereal pi_();
static doublereal rom;
static integer ndm2;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dfdp_dim1 = *ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--uold;
--u;
/* Function Body */
ndm2 = *ndm << 1;
rom = u[*ndim - 1];
par[11] = rom * pi_(&blrcn_1.two);
par[icp[2]] = u[*ndim];
ijac = 1;
funi_(ndm, &u[1], &uold[1], &icp[1], &par[1], &ijac, &f[1], &dfdu[
dfdu_offset], &dfdp[dfdp_offset]);
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndm + i] = u[ndm2 + i];
f[ndm2 + i] = -u[*ndm + i];
i__2 = *ndm;
for (j = 1; j <= i__2; ++j) {
f[*ndm + i] += rom * dfdu[i + j * dfdu_dim1] * u[*ndm + j];
f[ndm2 + i] += rom * dfdu[i + j * dfdu_dim1] * u[ndm2 + j];
/* L1: */
}
/* L2: */
}
f[*ndim - 1] = -blrcn_1.one;
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndim - 1] = f[*ndim - 1] + u[*ndm + i] * u[*ndm + i] + u[ndm2 + i]
* u[ndm2 + i];
/* L3: */
}
f[*ndim] = blrcn_1.zero;
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndim] = f[*ndim] + uold[ndm2 + i] * (u[*ndm + i] - uold[*ndm + i])
- uold[*ndm + i] * (u[ndm2 + i] - uold[ndm2 + i]);
/* L4: */
}
return 0;
} /* ffhb_ */
/* ---------- ------ */
/* Subroutine */ int stpnhb_(ibr, u, ndm2, smat, dfdu, dfuxx, dfdp, v, f, ir,
ic)
integer *ibr;
doublereal *u;
integer *ndm2;
doublereal *smat, *dfdu, *dfuxx, *dfdp, *v, *f;
integer *ir, *ic;
{
/* System generated locals */
integer smat_dim1, smat_offset, dfdu_dim1, dfdu_offset, dfuxx_dim1,
dfuxx_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
static integer ijac;
extern /* Subroutine */ int funi_(), nlvc_();
static doublereal uold;
static integer i, j;
static logical found;
extern /* Subroutine */ int nrmlz_(), readl3_(), findl3_();
static integer nfpar1;
extern doublereal pi_();
static doublereal rho;
static integer itp;
static doublereal rom;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates starting data for the 2-parameter continuation of */
/* Hopf bifurcation point (ODE). */
/* Parameter adjustments */
--ic;
--ir;
--f;
--v;
dfdp_dim1 = blicn_1.ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfuxx_dim1 = blicn_1.ndmp1;
dfuxx_offset = dfuxx_dim1 + 1;
dfuxx -= dfuxx_offset;
dfdu_dim1 = blicn_1.ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
smat_dim1 = *ndm2;
smat_offset = smat_dim1 + 1;
smat -= smat_offset;
--u;
/* Function Body */
findl3_(&blbcn_1.irs, &itp, &nfpar1, &found);
readl3_(&blbcn_1.ips, ibr, &u[1], blbcn_1.par);
ijac = 1;
rho = blbcn_1.par[10];
rom = rho / pi_(&blrcn_1.two);
funi_(&blicn_1.ndm, &u[1], &uold, blbcn_1.icp, blbcn_1.par, &ijac, &f[1],
&dfdu[dfdu_offset], &dfdp[dfdp_offset]);
*ndm2 = blicn_1.ndm << 1;
i__1 = *ndm2;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndm2;
for (j = 1; j <= i__2; ++j) {
smat[i + j * smat_dim1] = blrcn_1.zero;
/* L1: */
}
/* L2: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
smat[i + (blicn_1.ndm + i) * smat_dim1] = blrcn_1.one;
/* L3: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
smat[blicn_1.ndm + i + i * smat_dim1] = -blrcn_1.one;
/* L4: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
i__2 = blicn_1.ndm;
for (j = 1; j <= i__2; ++j) {
smat[i + j * smat_dim1] = rom * dfdu[i + j * dfdu_dim1];
smat[blicn_1.ndm + i + (blicn_1.ndm + j) * smat_dim1] = rom *
dfdu[i + j * dfdu_dim1];
/* L5: */
}
/* L6: */
}
nlvc_(ndm2, ndm2, &c__2, &smat[smat_offset], &v[1], &ir[1], &ic[1]);
nrmlz_(ndm2, &v[1]);
i__1 = *ndm2;
for (i = 1; i <= i__1; ++i) {
u[blicn_1.ndm + i] = v[i];
/* L7: */
}
u[blbcn_1.ndim - 1] = rom;
u[blbcn_1.ndim] = blbcn_1.par[blbcn_1.icp[1] - 1];
return 0;
} /* stpnhb_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Subroutines for the Continuation of Hopf Bifurcation Points (Waves) */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int fnhw_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int ffhw_();
static integer i, j;
static doublereal ep, umx;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates the equations for the 2-parameter continuation of a */
/* bifurcation to a traveling wave. */
/* Generate the function. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--uold;
--u;
/* Function Body */
ffhw_(ndim, &u[1], &uold[1], &icp[1], &par[1], &f[1], &blicn_1.ndm,
blwif_1.dfuxx, blwif_1.dfpxx);
if (*ijac == 0) {
return 0;
}
/* Generate the Jacobian. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u[i], abs(d__1)) > umx) {
umx = (d__2 = u[i], abs(d__2));
}
/* SGLE IF( ABS(U(I)).GT.UMX)UMX= ABS(U(I)) */
/* L2: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
blwif_1.u1xx[j - 1] = u[j];
blwif_1.u2xx[j - 1] = u[j];
/* L3: */
}
blwif_1.u1xx[i - 1] -= ep;
blwif_1.u2xx[i - 1] += ep;
ffhw_(ndim, blwif_1.u1xx, &uold[1], &icp[1], &par[1], blwif_1.f1xx, &
blicn_1.ndm, blwif_1.dfuxx, blwif_1.dfpxx);
ffhw_(ndim, blwif_1.u2xx, &uold[1], &icp[1], &par[1], blwif_1.f2xx, &
blicn_1.ndm, blwif_1.dfuxx, blwif_1.dfpxx);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[j + i * dfdu_dim1] = (blwif_1.f2xx[j - 1] - blwif_1.f1xx[j -
1]) / (ep * 2);
/* L4: */
}
/* L5: */
}
par[icp[1]] += ep;
ffhw_(ndim, &u[1], &uold[1], &icp[1], &par[1], blwif_1.f1xx, &blicn_1.ndm,
blwif_1.dfuxx, blwif_1.dfpxx);
i__1 = *ndim;
for (j = 1; j <= i__1; ++j) {
dfdp[j + icp[1] * dfdp_dim1] = (blwif_1.f1xx[j - 1] - f[j]) / ep;
/* L6: */
}
par[icp[1]] -= ep;
return 0;
} /* fnhw_ */
/* ---------- ---- */
/* Subroutine */ int ffhw_(ndim, u, uold, icp, par, f, ndm, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par, *f;
integer *ndm;
doublereal *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
static integer ijac;
extern /* Subroutine */ int fnws_();
static integer i, j;
static doublereal rom;
static integer ndm2;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dfdp_dim1 = *ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--uold;
--u;
/* Function Body */
ndm2 = *ndm << 1;
rom = u[*ndim - 1];
par[icp[2]] = u[*ndim];
ijac = 1;
fnws_(ndm, &u[1], &uold[1], &icp[1], &par[1], &ijac, &f[1], &dfdu[
dfdu_offset], &dfdp[dfdp_offset]);
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndm + i] = u[ndm2 + i];
f[ndm2 + i] = -u[*ndm + i];
i__2 = *ndm;
for (j = 1; j <= i__2; ++j) {
f[*ndm + i] += rom * dfdu[i + j * dfdu_dim1] * u[*ndm + j];
f[ndm2 + i] += rom * dfdu[i + j * dfdu_dim1] * u[ndm2 + j];
/* L1: */
}
/* L2: */
}
f[*ndim - 1] = -blrcn_1.one;
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndim - 1] = f[*ndim - 1] + u[*ndm + i] * u[*ndm + i] + u[ndm2 + i]
* u[ndm2 + i];
/* L3: */
}
f[*ndim] = blrcn_1.zero;
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndim] = f[*ndim] + uold[ndm2 + i] * (u[*ndm + i] - uold[*ndm + i])
- uold[*ndm + i] * (u[ndm2 + i] - uold[ndm2 + i]);
/* L4: */
}
return 0;
} /* ffhw_ */
/* ---------- ------ */
/* Subroutine */ int stpnhw_(ibr, u, ndm2, smat, dfdu, dfuxx, dfdp, v, f, ir,
ic)
integer *ibr;
doublereal *u;
integer *ndm2;
doublereal *smat, *dfdu, *dfuxx, *dfdp, *v, *f;
integer *ir, *ic;
{
/* System generated locals */
integer smat_dim1, smat_offset, dfdu_dim1, dfdu_offset, dfuxx_dim1,
dfuxx_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
static integer ijac;
extern /* Subroutine */ int nlvc_();
static doublereal uold;
extern /* Subroutine */ int fnws_();
static integer i, j;
static logical found;
extern /* Subroutine */ int nrmlz_(), readl3_(), findl3_();
static integer nfpar1;
extern doublereal pi_();
static doublereal rho;
static integer itp;
static doublereal rom;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates starting data for the continuation of a bifurcation to a */
/* traveling wave. */
/* Parameter adjustments */
--ic;
--ir;
--f;
--v;
dfdp_dim1 = blicn_1.ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfuxx_dim1 = blicn_1.ndmp1;
dfuxx_offset = dfuxx_dim1 + 1;
dfuxx -= dfuxx_offset;
dfdu_dim1 = blicn_1.ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
smat_dim1 = *ndm2;
smat_offset = smat_dim1 + 1;
smat -= smat_offset;
--u;
/* Function Body */
findl3_(&blbcn_1.irs, &itp, &nfpar1, &found);
readl3_(&blbcn_1.ips, ibr, &u[1], blbcn_1.par);
ijac = 1;
rho = blbcn_1.par[10];
rom = rho / pi_(&blrcn_1.two);
fnws_(&blicn_1.ndm, &u[1], &uold, blbcn_1.icp, blbcn_1.par, &ijac, &f[1],
&dfdu[dfdu_offset], &dfdp[dfdp_offset]);
*ndm2 = blicn_1.ndm << 1;
i__1 = *ndm2;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndm2;
for (j = 1; j <= i__2; ++j) {
smat[i + j * smat_dim1] = blrcn_1.zero;
/* L1: */
}
/* L2: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
smat[i + (blicn_1.ndm + i) * smat_dim1] = blrcn_1.one;
/* L3: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
smat[blicn_1.ndm + i + i * smat_dim1] = -blrcn_1.one;
/* L4: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
i__2 = blicn_1.ndm;
for (j = 1; j <= i__2; ++j) {
smat[i + j * smat_dim1] = rom * dfdu[i + j * dfdu_dim1];
smat[blicn_1.ndm + i + (blicn_1.ndm + j) * smat_dim1] = rom *
dfdu[i + j * dfdu_dim1];
/* L5: */
}
/* L6: */
}
nlvc_(ndm2, ndm2, &c__2, &smat[smat_offset], &v[1], &ir[1], &ic[1]);
nrmlz_(ndm2, &v[1]);
i__1 = *ndm2;
for (i = 1; i <= i__1; ++i) {
u[blicn_1.ndm + i] = v[i];
/* L7: */
}
u[blbcn_1.ndim - 1] = rom;
u[blbcn_1.ndim] = blbcn_1.par[blbcn_1.icp[1] - 1];
return 0;
} /* stpnhw_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Subroutines for the Continuation of Periodic Limit Points */
/* and Period Doubling Bifurcations */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int fnpl_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int ffpl_();
static integer i, j;
static doublereal ep, umx;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Subroutines for the 2-parameter continuation of of limit points */
/* on branches of periodic solutions. */
/* Generate the function. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
ffpl_(ndim, &u[1], uold, &icp[1], &par[1], &f[1], &blicn_1.ndm,
blwif_1.dfuxx, blwif_1.dfpxx);
if (*ijac == 0) {
return 0;
}
/* Generate the Jacobian. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u[i], abs(d__1)) > umx) {
umx = (d__2 = u[i], abs(d__2));
}
/* SGLE IF( ABS(U(I)).GT.UMX)UMX= ABS(U(I)) */
/* L1: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
blwif_1.u1xx[j - 1] = u[j];
blwif_1.u2xx[j - 1] = u[j];
/* L2: */
}
blwif_1.u1xx[i - 1] -= ep;
blwif_1.u2xx[i - 1] += ep;
ffpl_(ndim, blwif_1.u1xx, uold, &icp[1], &par[1], blwif_1.f1xx, &
blicn_1.ndm, blwif_1.dfuxx, blwif_1.dfpxx);
ffpl_(ndim, blwif_1.u2xx, uold, &icp[1], &par[1], blwif_1.f2xx, &
blicn_1.ndm, blwif_1.dfuxx, blwif_1.dfpxx);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[j + i * dfdu_dim1] = (blwif_1.f2xx[j - 1] - blwif_1.f1xx[j -
1]) / (ep * 2);
/* L3: */
}
/* L4: */
}
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
par[icp[i]] += ep;
ffpl_(ndim, &u[1], uold, &icp[1], &par[1], blwif_1.f1xx, &blicn_1.ndm,
blwif_1.dfuxx, blwif_1.dfpxx);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdp[j + icp[i] * dfdp_dim1] = (blwif_1.f1xx[j - 1] - f[j]) / ep;
/* L5: */
}
par[icp[i]] -= ep;
/* L6: */
}
return 0;
} /* fnpl_ */
/* ---------- ---- */
/* Subroutine */ int ffpl_(ndim, u, uold, icp, par, f, ndm, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par, *f;
integer *ndm;
doublereal *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
static integer ijac;
extern /* Subroutine */ int funi_();
static integer i, j;
static doublereal c1, c2;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dfdp_dim1 = *ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
ijac = 1;
c1 = par[icp[3]];
/* SGLE C1=PAR(ICP(3)) */
c2 = par[icp[4]];
/* SGLE C2=PAR(ICP(4)) */
funi_(ndm, &u[1], uold, &icp[1], &par[1], &ijac, &f[1], &dfdu[dfdu_offset]
, &dfdp[dfdp_offset]);
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndm + i] = blrcn_1.zero;
i__2 = *ndm;
for (j = 1; j <= i__2; ++j) {
f[*ndm + i] += dfdu[i + j * dfdu_dim1] * u[*ndm + j];
/* L1: */
}
f[*ndm + i] = c1 * f[*ndm + i] + c2 * f[i];
f[i] = c1 * f[i];
/* L2: */
}
return 0;
} /* ffpl_ */
/* ---------- ---- */
/* Subroutine */ int bcpl_(ndim, par, icp, nbc, u0, u1, f, ijac, dbc)
integer *ndim;
doublereal *par;
integer *icp, *nbc;
doublereal *u0, *u1, *f;
integer *ijac;
doublereal *dbc;
{
/* System generated locals */
integer dbc_dim1, dbc_offset, i__1, i__2;
/* Local variables */
static integer i, j, nn;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dbc_dim1 = *nbc;
dbc_offset = dbc_dim1 + 1;
dbc -= dbc_offset;
--f;
--u1;
--u0;
--icp;
--par;
/* Function Body */
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
f[i] = u0[i] - u1[i];
/* L1: */
}
if (blrtn.irot != 0) {
for (i= 1; i <= i__1; ++i) {
if (blrtn.nrot[i- 1] != 0) {
f[i] += blrtn.torper* blrtn.nrot[i- 1];
}
}
}
if (*ijac == 0) {
return 0;
}
nn = (*ndim << 1) + blicn_1.npar;
i__1 = *nbc;
for (i = 1; i <= i__1; ++i) {
i__2 = nn;
for (j = 1; j <= i__2; ++j) {
dbc[i + j * dbc_dim1] = blrcn_1.zero;
/* L2: */
}
/* L3: */
}
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
dbc[i + i * dbc_dim1] = blrcn_1.one;
dbc[i + (*ndim + i) * dbc_dim1] = -blrcn_1.one;
/* L4: */
}
return 0;
} /* bcpl_ */
/* ---------- ---- */
/* Subroutine */ int bcpd_(ndim, par, icp, nbc, u0, u1, f, ijac, dbc)
integer *ndim;
doublereal *par;
integer *icp, *nbc;
doublereal *u0, *u1, *f;
integer *ijac;
doublereal *dbc;
{
/* System generated locals */
integer dbc_dim1, dbc_offset, i__1, i__2;
/* Local variables */
static integer i, j, nn;
/* Generate boundary conditions for the 2-parameter continuation */
/* of period doubling bifurcations. */
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dbc_dim1 = *nbc;
dbc_offset = dbc_dim1 + 1;
dbc -= dbc_offset;
--f;
--u1;
--u0;
--icp;
--par;
/* Function Body */
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
f[i] = u0[i] - u1[i];
f[blicn_1.ndm + i] = u0[blicn_1.ndm + i] + u1[blicn_1.ndm + i];
/* L1: */
}
if (blrtn.irot != 0) {
for (i= 1; i <= i__1; ++i) {
if (blrtn.nrot[i- 1] != 0) {
f[i] += blrtn.torper* blrtn.nrot[i- 1];
}
}
}
if (*ijac == 0) {
return 0;
}
nn = (*ndim << 1) + blicn_1.npar;
i__1 = *nbc;
for (i = 1; i <= i__1; ++i) {
i__2 = nn;
for (j = 1; j <= i__2; ++j) {
dbc[i + j * dbc_dim1] = blrcn_1.zero;
/* L2: */
}
/* L3: */
}
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
dbc[i + i * dbc_dim1] = blrcn_1.one;
if (i <= blicn_1.ndm) {
dbc[i + (*ndim + i) * dbc_dim1] = -blrcn_1.one;
} else {
dbc[i + (*ndim + i) * dbc_dim1] = blrcn_1.one;
}
/* L4: */
}
return 0;
} /* bcpd_ */
/* ---------- ---- */
/* Subroutine */ int icpl_(ndim, par, icp, nint, u, uold, udot, upold, f,
ijac, dint)
integer *ndim;
doublereal *par;
integer *icp, *nint;
doublereal *u, *uold, *udot, *upold, *f;
integer *ijac;
doublereal *dint;
{
/* System generated locals */
integer dint_dim1, dint_offset, i__1, i__2;
doublereal d__1;
/* Local variables */
static integer i, j, nn;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dint_dim1 = *nint;
dint_offset = dint_dim1 + 1;
dint -= dint_offset;
--f;
--upold;
--udot;
--uold;
--u;
--icp;
--par;
/* Function Body */
f[1] = blrcn_1.zero;
f[2] = blrcn_1.zero;
/* Computing 2nd power */
d__1 = par[icp[4]];
f[3] = d__1 * d__1 - blrcn_1.one;
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
if (blrtn.nrot[i - 1] == 0) {
f[1] += u[i] * upold[i];
f[2] += u[blicn_1.ndm + i] * upold[i];}
f[3] += u[blicn_1.ndm + i] * u[blicn_1.ndm + i];
/* L1: */
}
if (*ijac == 0) {
return 0;
}
nn = *ndim + blicn_1.npar;
i__1 = *nint;
for (i = 1; i <= i__1; ++i) {
i__2 = nn;
for (j = 1; j <= i__2; ++j) {
dint[i + j * dint_dim1] = blrcn_1.zero;
/* L2: */
}
/* L3: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
if (blrtn.nrot[i- 1] == 0) {
dint[i * dint_dim1 + 1] = upold[i];
dint[(blicn_1.ndm + i) * dint_dim1 + 2] = upold[i];
} else {
dint[i * dint_dim1 + 1] = 0;
dint[(blicn_1.ndm + i) * dint_dim1 + 2] = 0;
}
dint[(blicn_1.ndm + i) * dint_dim1 + 3] = blrcn_1.two * u[blicn_1.ndm
+ i];
/* L4: */
}
dint[(*ndim + icp[4]) * dint_dim1 + 3] = blrcn_1.two * par[icp[4]];
return 0;
} /* icpl_ */
/* ---------- ------ */
/* Subroutine */ int stpnpl_(ntstrs, ncolrs, lab, ibr, m1u, u, ups, udotps,
upoldp, tm, dtm, ndim2, smat, rnllv, ir, ic, f, dfdu, dfdp, nodir)
integer *ntstrs, *ncolrs, *lab, *ibr, *m1u;
doublereal *u, *ups, *udotps, *upoldp, *tm, *dtm;
integer *ndim2;
doublereal *smat, *rnllv;
integer *ir, *ic;
doublereal *f, *dfdu, *dfdp;
integer *nodir;
{
/* Format strings */
static char fmt_101[] = "(4x,1p7e18.10)";
/* System generated locals */
integer ups_dim1, ups_offset, udotps_dim1, udotps_offset, upoldp_dim1,
upoldp_offset, smat_dim1, smat_offset, dfdu_dim1, dfdu_offset,
dfdp_dim1, dfdp_offset, i__1, i__2, i__3;
/* Builtin functions */
integer s_rsle(), do_lio(), e_rsle(), s_rsfe(), do_fio(), e_rsfe();
/* Local variables */
static doublereal temp[7];
static integer ntpl1, nrsp1, ntot1, i, j, k;
static logical found;
static integer icprs[20], k1, k2;
extern /* Subroutine */ int findl3_();
static integer nfpar1, nskip1, lab1, nar1, itp1, isw1;
/* Fortran I/O blocks */
static cilist io___113 = { 0, 3, 0, 0, 0 };
static cilist io___126 = { 0, 3, 0, fmt_101, 0 };
static cilist io___129 = { 0, 3, 0, fmt_101, 0 };
static cilist io___130 = { 0, 3, 0, fmt_101, 0 };
static cilist io___131 = { 0, 3, 0, fmt_101, 0 };
static cilist io___132 = { 0, 3, 0, fmt_101, 0 };
static cilist io___133 = { 0, 3, 0, fmt_101, 0 };
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates starting data for the 2-parameter continuation of limit */
/* points on a branch of periodic solutions. */
/* Parameter adjustments */
dfdp_dim1 = blbcn_1.ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = blbcn_1.ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--ic;
--ir;
--rnllv;
smat_dim1 = *ndim2;
smat_offset = smat_dim1 + 1;
smat -= smat_offset;
--dtm;
--tm;
upoldp_dim1 = *m1u;
upoldp_offset = upoldp_dim1 + 1;
upoldp -= upoldp_offset;
udotps_dim1 = *m1u;
udotps_offset = udotps_dim1 + 1;
udotps -= udotps_offset;
ups_dim1 = *m1u;
ups_offset = ups_dim1 + 1;
ups -= ups_offset;
--u;
/* Function Body */
findl3_(&blbcn_1.irs, &itp1, &nfpar1, &found);
s_rsle(&io___113);
do_lio(&c__3, &c__1, (char *)&(*ibr), (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&ntot1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&itp1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&lab1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&nfpar1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&isw1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&ntpl1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&nar1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&nskip1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&(*ntstrs), (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&(*ncolrs), (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&icprs[0], (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&icprs[1], (ftnlen)sizeof(integer));
e_rsle();
nrsp1 = *ntstrs + 1;
i__1 = *ntstrs;
for (j = 1; j <= i__1; ++j) {
i__2 = *ncolrs;
for (i = 1; i <= i__2; ++i) {
k1 = (i - 1) * blbcn_1.ndim + 1;
k2 = k1 + blicn_1.ndm - 1;
s_rsfe(&io___126);
do_fio(&c__1, (char *)&temp[i - 1], (ftnlen)sizeof(doublereal));
i__3 = k2;
for (k = k1; k <= i__3; ++k) {
do_fio(&c__1, (char *)&ups[j + k * ups_dim1], (ftnlen)sizeof(
doublereal));
}
e_rsfe();
/* L1: */
}
tm[j] = temp[0];
/* L2: */
}
s_rsfe(&io___129);
do_fio(&c__1, (char *)&tm[nrsp1], (ftnlen)sizeof(doublereal));
i__1 = blicn_1.ndm;
for (k = 1; k <= i__1; ++k) {
do_fio(&c__1, (char *)&ups[nrsp1 + k * ups_dim1], (ftnlen)sizeof(
doublereal));
}
e_rsfe();
s_rsfe(&io___130);
do_fio(&c__1, (char *)&blcrl_1.rldot[0], (ftnlen)sizeof(doublereal));
do_fio(&c__1, (char *)&blcrl_1.rldot[1], (ftnlen)sizeof(doublereal));
e_rsfe();
/* Read U-dot (derivative with respect to arclength). */
i__1 = *ntstrs;
for (j = 1; j <= i__1; ++j) {
i__2 = *ncolrs;
for (i = 1; i <= i__2; ++i) {
k1 = (i - 1) * blbcn_1.ndim + blicn_1.ndm + 1;
k2 = i * blbcn_1.ndim;
s_rsfe(&io___131);
i__3 = k2;
for (k = k1; k <= i__3; ++k) {
do_fio(&c__1, (char *)&ups[j + k * ups_dim1], (ftnlen)sizeof(
doublereal));
}
e_rsfe();
/* L3: */
}
/* L4: */
}
k1 = blicn_1.ndm + 1;
s_rsfe(&io___132);
i__1 = blbcn_1.ndim;
for (k = k1; k <= i__1; ++k) {
do_fio(&c__1, (char *)&ups[nrsp1 + k * ups_dim1], (ftnlen)sizeof(
doublereal));
}
e_rsfe();
/* Read the parameter values. */
s_rsfe(&io___133);
i__1 = blicn_1.npar;
for (i = 1; i <= i__1; ++i) {
do_fio(&c__1, (char *)&blbcn_1.par[i - 1], (ftnlen)sizeof(doublereal))
;
}
e_rsfe();
blbcn_1.par[blbcn_1.icp[3] - 1] = blcrl_1.rldot[1];
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
blcrl_1.rl[i - 1] = blbcn_1.par[blbcn_1.icp[i - 1] - 1];
/* L5: */
}
*nodir = 1;
return 0;
} /* stpnpl_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Subroutines for the Continuation of Limit Points for BVP. */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int fnbl_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int ffbl_();
static integer i, j;
static doublereal ep, umx;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates the equations for the 2-parameter continuation */
/* of limit points (BVP). */
/* Generate the function. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
ffbl_(ndim, &u[1], uold, &icp[1], &par[1], &f[1], blwif_1.dfuxx,
blwif_1.dfpxx);
if (*ijac == 0) {
return 0;
}
/* Generate the Jacobian. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u[i], abs(d__1)) > umx) {
umx = (d__2 = u[i], abs(d__2));
}
/* SGLE IF( ABS(U(I)).GT.UMX)UMX= ABS(U(I)) */
/* L1: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
blwif_1.u1xx[j - 1] = u[j];
blwif_1.u2xx[j - 1] = u[j];
/* L2: */
}
blwif_1.u1xx[i - 1] -= ep;
blwif_1.u2xx[i - 1] += ep;
ffbl_(ndim, blwif_1.u1xx, uold, &icp[1], &par[1], blwif_1.f1xx,
blwif_1.dfuxx, blwif_1.dfpxx);
ffbl_(ndim, blwif_1.u2xx, uold, &icp[1], &par[1], blwif_1.f2xx,
blwif_1.dfuxx, blwif_1.dfpxx);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[j + i * dfdu_dim1] = (blwif_1.f2xx[j - 1] - blwif_1.f1xx[j -
1]) / (ep * 2);
/* L3: */
}
/* L4: */
}
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
par[icp[i]] += ep;
ffbl_(ndim, &u[1], uold, &icp[1], &par[1], blwif_1.f1xx,
blwif_1.dfuxx, blwif_1.dfpxx);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdp[j + icp[i] * dfdp_dim1] = (blwif_1.f1xx[j - 1] - f[j]) / ep;
/* L5: */
}
par[icp[i]] -= ep;
/* L6: */
}
return 0;
} /* fnbl_ */
/* ---------- ---- */
/* Subroutine */ int ffbl_(ndim, u, uold, icp, par, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par, *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
static integer ijac;
extern /* Subroutine */ int funi_();
static integer nfpx, i, j;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dfdp_dim1 = blicn_1.ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = blicn_1.ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
ijac = 1;
funi_(&blicn_1.ndm, &u[1], uold, &icp[1], &par[1], &ijac, &f[1], &dfdu[
dfdu_offset], &dfdp[dfdp_offset]);
nfpx = blicn_1.nfpar / 2 - 1;
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
f[blicn_1.ndm + i] = blrcn_1.zero;
i__2 = blicn_1.ndm;
for (j = 1; j <= i__2; ++j) {
f[blicn_1.ndm + i] += dfdu[i + j * dfdu_dim1] * u[blicn_1.ndm + j]
;
/* L1: */
}
if (nfpx > 0) {
i__2 = nfpx;
for (j = 1; j <= i__2; ++j) {
f[blicn_1.ndm + i] += dfdp[i + icp[j + 1] * dfdp_dim1] * par[
icp[blicn_1.nfpar - nfpx + j]];
/* L2: */
}
}
/* L3: */
}
return 0;
} /* ffbl_ */
/* ---------- ---- */
/* Subroutine */ int bcbl_(ndim, par, icp, nbc, u0, u1, f, ijac, dbc)
integer *ndim;
doublereal *par;
integer *icp, *nbc;
doublereal *u0, *u1, *f;
integer *ijac;
doublereal *dbc;
{
/* System generated locals */
integer dbc_dim1, dbc_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int fbbl_();
static integer i, j;
static doublereal ep, umx;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates the boundary conditions for the 2-parameter continuation */
/* of limit points (BVP). */
/* Generate the function. */
/* Parameter adjustments */
dbc_dim1 = *nbc;
dbc_offset = dbc_dim1 + 1;
dbc -= dbc_offset;
--f;
--u1;
--u0;
--icp;
--par;
/* Function Body */
fbbl_(ndim, &par[1], &icp[1], nbc, &u0[1], &u1[1], &f[1], blwif_1.dfuxx);
if (*ijac == 0) {
return 0;
}
/* Derivatives with respect to U0. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u0[i], abs(d__1)) > umx) {
umx = (d__2 = u0[i], abs(d__2));
}
/* SGLE IF( ABS(U0(I)).GT.UMX)UMX= ABS(U0(I)) */
/* L1: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
blwif_1.u1xx[j - 1] = u0[j];
blwif_1.u2xx[j - 1] = u0[j];
/* L2: */
}
blwif_1.u1xx[i - 1] -= ep;
blwif_1.u2xx[i - 1] += ep;
fbbl_(ndim, &par[1], &icp[1], nbc, blwif_1.u1xx, &u1[1], blwif_1.f1xx,
blwif_1.dfuxx);
fbbl_(ndim, &par[1], &icp[1], nbc, blwif_1.u2xx, &u1[1], blwif_1.f2xx,
blwif_1.dfuxx);
i__2 = *nbc;
for (j = 1; j <= i__2; ++j) {
dbc[j + i * dbc_dim1] = (blwif_1.f2xx[j - 1] - blwif_1.f1xx[j - 1]
) / (ep * 2);
/* L3: */
}
/* L4: */
}
/* Derivatives with respect to U1. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u1[i], abs(d__1)) > umx) {
umx = (d__2 = u1[i], abs(d__2));
}
/* SGLE IF( ABS(U1(I)).GT.UMX)UMX= ABS(U1(I)) */
/* L5: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
blwif_1.u1xx[j - 1] = u1[j];
blwif_1.u2xx[j - 1] = u1[j];
/* L6: */
}
blwif_1.u1xx[i - 1] -= ep;
blwif_1.u2xx[i - 1] += ep;
fbbl_(ndim, &par[1], &icp[1], nbc, &u0[1], blwif_1.u1xx, blwif_1.f1xx,
blwif_1.dfuxx);
fbbl_(ndim, &par[1], &icp[1], nbc, &u0[1], blwif_1.u2xx, blwif_1.f2xx,
blwif_1.dfuxx);
i__2 = *nbc;
for (j = 1; j <= i__2; ++j) {
dbc[j + (*ndim + i) * dbc_dim1] = (blwif_1.f2xx[j - 1] -
blwif_1.f1xx[j - 1]) / (ep * 2);
/* L7: */
}
/* L8: */
}
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
par[icp[i]] += ep;
fbbl_(ndim, &par[1], &icp[1], nbc, &u0[1], &u1[1], blwif_1.f2xx,
blwif_1.dfuxx);
i__2 = *nbc;
for (j = 1; j <= i__2; ++j) {
dbc[j + ((*ndim << 1) + icp[i]) * dbc_dim1] = (blwif_1.f2xx[j - 1]
- f[j]) / ep;
/* L9: */
}
par[icp[i]] -= ep;
/* L10: */
}
return 0;
} /* bcbl_ */
/* ---------- ---- */
/* Subroutine */ int fbbl_(ndim, par, icp, nbc, u0, u1, f, dbc)
integer *ndim;
doublereal *par;
integer *icp, *nbc;
doublereal *u0, *u1, *f, *dbc;
{
/* System generated locals */
integer dbc_dim1, dbc_offset, i__1, i__2;
/* Local variables */
static integer ijac;
extern /* Subroutine */ int bcni_();
static integer nfpx, i, j;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dbc_dim1 = blicn_1.nbc0;
dbc_offset = dbc_dim1 + 1;
dbc -= dbc_offset;
--f;
--u1;
--u0;
--icp;
--par;
/* Function Body */
ijac = 1;
nfpx = blicn_1.nfpar / 2 - 1;
bcni_(&blicn_1.ndm, &par[1], &icp[1], &blicn_1.nbc0, &u0[1], &u1[1], &f[1]
, &ijac, &dbc[dbc_offset]);
i__1 = blicn_1.nbc0;
for (i = 1; i <= i__1; ++i) {
f[blicn_1.nbc0 + i] = blrcn_1.zero;
i__2 = blicn_1.ndm;
for (j = 1; j <= i__2; ++j) {
f[blicn_1.nbc0 + i] += dbc[i + j * dbc_dim1] * u0[blicn_1.ndm + j]
;
f[blicn_1.nbc0 + i] += dbc[i + (blicn_1.ndm + j) * dbc_dim1] * u1[
blicn_1.ndm + j];
/* L1: */
}
if (nfpx != 0) {
i__2 = nfpx;
for (j = 1; j <= i__2; ++j) {
f[blicn_1.nbc0 + i] += dbc[i + (*ndim + icp[j + 1]) *
dbc_dim1] * par[icp[blicn_1.nfpar - nfpx + j]];
/* L2: */
}
}
/* L3: */
}
return 0;
} /* fbbl_ */
/* ---------- ---- */
/* Subroutine */ int icbl_(ndim, par, icp, nint, u, uold, udot, upold, f,
ijac, dint)
integer *ndim;
doublereal *par;
integer *icp, *nint;
doublereal *u, *uold, *udot, *upold, *f;
integer *ijac;
doublereal *dint;
{
/* System generated locals */
integer dint_dim1, dint_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int fibl_();
static integer i, j;
static doublereal ep, umx;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates integral conditions for the 2-parameter continuation of */
/* limit points (BVP). */
/* Generate the function. */
/* Parameter adjustments */
dint_dim1 = *nint;
dint_offset = dint_dim1 + 1;
dint -= dint_offset;
--f;
--upold;
--udot;
--uold;
--u;
--icp;
--par;
/* Function Body */
fibl_(ndim, &par[1], &icp[1], nint, &u[1], &uold[1], &udot[1], &upold[1],
&f[1], blwif_1.dfuxx);
if (*ijac == 0) {
return 0;
}
/* Generate the Jacobian. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u[i], abs(d__1)) > umx) {
umx = (d__2 = u[i], abs(d__2));
}
/* SGLE IF( ABS(U(I)).GT.UMX)UMX= ABS(U(I)) */
/* L1: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
blwif_1.u1xx[j - 1] = u[j];
blwif_1.u2xx[j - 1] = u[j];
/* L2: */
}
blwif_1.u1xx[i - 1] -= ep;
blwif_1.u2xx[i - 1] += ep;
fibl_(ndim, &par[1], &icp[1], nint, blwif_1.u1xx, &uold[1], &udot[1],
&upold[1], blwif_1.f1xx, blwif_1.dfuxx);
fibl_(ndim, &par[1], &icp[1], nint, blwif_1.u2xx, &uold[1], &udot[1],
&upold[1], blwif_1.f2xx, blwif_1.dfuxx);
i__2 = *nint;
for (j = 1; j <= i__2; ++j) {
dint[j + i * dint_dim1] = (blwif_1.f2xx[j - 1] - blwif_1.f1xx[j -
1]) / (ep * 2);
/* L3: */
}
/* L4: */
}
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
par[icp[i]] += ep;
fibl_(ndim, &par[1], &icp[1], nint, &u[1], &uold[1], &udot[1], &upold[
1], blwif_1.f1xx, blwif_1.dfuxx);
i__2 = *nint;
for (j = 1; j <= i__2; ++j) {
dint[j + (*ndim + icp[i]) * dint_dim1] = (blwif_1.f1xx[j - 1] - f[
j]) / ep;
/* L5: */
}
par[icp[i]] -= ep;
/* L6: */
}
return 0;
} /* icbl_ */
/* ---------- ---- */
/* Subroutine */ int fibl_(ndim, par, icp, nint, u, uold, udot, upold, f,
dint)
integer *ndim;
doublereal *par;
integer *icp, *nint;
doublereal *u, *uold, *udot, *upold, *f, *dint;
{
/* System generated locals */
integer dint_dim1, dint_offset, i__1, i__2;
doublereal d__1;
/* Local variables */
static integer ijac;
extern /* Subroutine */ int icni_();
static integer nfpx, i, j;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dint_dim1 = blicn_1.nint0;
dint_offset = dint_dim1 + 1;
dint -= dint_offset;
--f;
--upold;
--udot;
--uold;
--u;
--icp;
--par;
/* Function Body */
if (blicn_1.nint0 > 0) {
nfpx = blicn_1.nfpar / 2 - 1;
ijac = 1;
icni_(&blicn_1.ndm, &par[1], &icp[1], &blicn_1.nint0, &u[1], &uold[1],
&udot[1], &upold[1], &f[1], &ijac, &dint[dint_offset]);
i__1 = blicn_1.nint0;
for (i = 1; i <= i__1; ++i) {
f[blicn_1.nint0 + i] = blrcn_1.zero;
i__2 = blicn_1.ndm;
for (j = 1; j <= i__2; ++j) {
f[blicn_1.nint0 + i] += dint[i + j * dint_dim1] * u[
blicn_1.ndm + j];
/* L1: */
}
if (nfpx != 0) {
i__2 = nfpx;
for (j = 1; j <= i__2; ++j) {
f[blicn_1.nint0 + i] += dint[i + (blicn_1.ndm + icp[j + 1]
) * dint_dim1] * par[icp[blicn_1.nfpar - nfpx + j]
];
/* L2: */
}
}
/* L3: */
}
}
f[*nint] = -blrcn_1.one;
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
f[*nint] += u[blicn_1.ndm + i] * u[blicn_1.ndm + i];
/* L4: */
}
if (nfpx != 0) {
i__1 = nfpx;
for (i = 1; i <= i__1; ++i) {
/* Computing 2nd power */
d__1 = par[icp[blicn_1.nfpar - nfpx + i]];
f[*nint] += d__1 * d__1;
/* L5: */
}
}
return 0;
} /* fibl_ */
/* ---------- ------ */
/* Subroutine */ int stpnbl_(ntstrs, ncolrs, lab, ibr, m1u, u, ups, udotps,
upoldp, tm, dtm, ndim2, smat, rnllv, ir, ic, f, dfdu, dfdp, nodir)
integer *ntstrs, *ncolrs, *lab, *ibr, *m1u;
doublereal *u, *ups, *udotps, *upoldp, *tm, *dtm;
integer *ndim2;
doublereal *smat, *rnllv;
integer *ir, *ic;
doublereal *f, *dfdu, *dfdp;
integer *nodir;
{
/* Format strings */
static char fmt_101[] = "(4x,1p7e18.10)";
/* System generated locals */
integer ups_dim1, ups_offset, udotps_dim1, udotps_offset, upoldp_dim1,
upoldp_offset, smat_dim1, smat_offset, dfdu_dim1, dfdu_offset,
dfdp_dim1, dfdp_offset, i__1, i__2, i__3;
/* Builtin functions */
integer s_rsle(), do_lio(), e_rsle(), s_rsfe(), do_fio(), e_rsfe();
/* Local variables */
static doublereal temp[7];
static integer nfpx, ntpl1, nrsp1, ntot1, i, j, k;
static logical found;
static integer icprs[20], k1, k2;
extern /* Subroutine */ int findl3_();
static integer nfpar0, nfpar1, nskip1, lab1, nar1, itp1, isw1;
/* Fortran I/O blocks */
static cilist io___161 = { 0, 3, 0, 0, 0 };
static cilist io___174 = { 0, 3, 0, fmt_101, 0 };
static cilist io___177 = { 0, 3, 0, fmt_101, 0 };
static cilist io___179 = { 0, 3, 0, fmt_101, 0 };
static cilist io___180 = { 0, 3, 0, fmt_101, 0 };
static cilist io___181 = { 0, 3, 0, fmt_101, 0 };
static cilist io___182 = { 0, 3, 0, fmt_101, 0 };
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates starting data for the 2-parameter continuation of limit */
/* points (BVP). */
/* Parameter adjustments */
dfdp_dim1 = blbcn_1.ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = blbcn_1.ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--ic;
--ir;
--rnllv;
smat_dim1 = *ndim2;
smat_offset = smat_dim1 + 1;
smat -= smat_offset;
--dtm;
--tm;
upoldp_dim1 = *m1u;
upoldp_offset = upoldp_dim1 + 1;
upoldp -= upoldp_offset;
udotps_dim1 = *m1u;
udotps_offset = udotps_dim1 + 1;
udotps -= udotps_offset;
ups_dim1 = *m1u;
ups_offset = ups_dim1 + 1;
ups -= ups_offset;
--u;
/* Function Body */
findl3_(&blbcn_1.irs, &itp1, &nfpar1, &found);
s_rsle(&io___161);
do_lio(&c__3, &c__1, (char *)&(*ibr), (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&ntot1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&itp1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&lab1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&nfpar1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&isw1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&ntpl1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&nar1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&nskip1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&(*ntstrs), (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&(*ncolrs), (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&icprs[0], (ftnlen)sizeof(integer));
e_rsle();
nrsp1 = *ntstrs + 1;
i__1 = *ntstrs;
for (j = 1; j <= i__1; ++j) {
i__2 = *ncolrs;
for (i = 1; i <= i__2; ++i) {
k1 = (i - 1) * blbcn_1.ndim + 1;
k2 = k1 + blicn_1.ndm - 1;
s_rsfe(&io___174);
do_fio(&c__1, (char *)&temp[i - 1], (ftnlen)sizeof(doublereal));
i__3 = k2;
for (k = k1; k <= i__3; ++k) {
do_fio(&c__1, (char *)&ups[j + k * ups_dim1], (ftnlen)sizeof(
doublereal));
}
e_rsfe();
/* L1: */
}
tm[j] = temp[0];
/* L2: */
}
s_rsfe(&io___177);
do_fio(&c__1, (char *)&tm[nrsp1], (ftnlen)sizeof(doublereal));
i__1 = blicn_1.ndm;
for (k = 1; k <= i__1; ++k) {
do_fio(&c__1, (char *)&ups[nrsp1 + k * ups_dim1], (ftnlen)sizeof(
doublereal));
}
e_rsfe();
nfpar0 = blicn_1.nfpar / 2;
s_rsfe(&io___179);
i__1 = nfpar0;
for (i = 1; i <= i__1; ++i) {
do_fio(&c__1, (char *)&blcrl_1.rldot[i - 1], (ftnlen)sizeof(
doublereal));
}
e_rsfe();
/* Read U-dot (Derivative with respect to arclength). */
i__1 = *ntstrs;
for (j = 1; j <= i__1; ++j) {
i__2 = *ncolrs;
for (i = 1; i <= i__2; ++i) {
k1 = (i - 1) * blbcn_1.ndim + blicn_1.ndm + 1;
k2 = i * blbcn_1.ndim;
s_rsfe(&io___180);
i__3 = k2;
for (k = k1; k <= i__3; ++k) {
do_fio(&c__1, (char *)&ups[j + k * ups_dim1], (ftnlen)sizeof(
doublereal));
}
e_rsfe();
/* L3: */
}
/* L4: */
}
k1 = blicn_1.ndm + 1;
s_rsfe(&io___181);
i__1 = blbcn_1.ndim;
for (k = k1; k <= i__1; ++k) {
do_fio(&c__1, (char *)&ups[nrsp1 + k * ups_dim1], (ftnlen)sizeof(
doublereal));
}
e_rsfe();
/* Read the parameter values. */
s_rsfe(&io___182);
i__1 = blicn_1.npar;
for (i = 1; i <= i__1; ++i) {
do_fio(&c__1, (char *)&blbcn_1.par[i - 1], (ftnlen)sizeof(doublereal))
;
}
e_rsfe();
nfpx = blicn_1.nfpar / 2 - 1;
if (nfpx > 0) {
i__1 = nfpx;
for (i = 1; i <= i__1; ++i) {
blbcn_1.par[blbcn_1.icp[nfpar0 + 1 + i - 1] - 1] = blcrl_1.rldot[
i];
/* L5: */
}
}
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
blcrl_1.rl[i - 1] = blbcn_1.par[blbcn_1.icp[i - 1] - 1];
/* L6: */
}
*nodir = 1;
return 0;
} /* stpnbl_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Subroutines for the Continuation of Bifurcations to Tori */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int fntr_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int fftr_();
static integer i, j;
static doublereal ep, umx;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates the equations for the 2-parameter continuation of */
/* bifurcations to tori. */
/* Generate the function. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
fftr_(ndim, &u[1], uold, &icp[1], &par[1], &f[1], &blicn_1.ndm,
blwif_1.dfuxx, blwif_1.dfpxx);
if (*ijac == 0) {
return 0;
}
/* Generate the Jacobian. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u[i], abs(d__1)) > umx) {
umx = (d__2 = u[i], abs(d__2));
}
/* SGLE IF( ABS(U(I)).GT.UMX)UMX= ABS(U(I)) */
/* L1: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
blwif_1.u1xx[j - 1] = u[j];
blwif_1.u2xx[j - 1] = u[j];
/* L2: */
}
blwif_1.u1xx[i - 1] -= ep;
blwif_1.u2xx[i - 1] += ep;
fftr_(ndim, blwif_1.u1xx, uold, &icp[1], &par[1], blwif_1.f1xx, &
blicn_1.ndm, blwif_1.dfuxx, blwif_1.dfpxx);
fftr_(ndim, blwif_1.u2xx, uold, &icp[1], &par[1], blwif_1.f2xx, &
blicn_1.ndm, blwif_1.dfuxx, blwif_1.dfpxx);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[j + i * dfdu_dim1] = (blwif_1.f2xx[j - 1] - blwif_1.f1xx[j -
1]) / (ep * 2);
/* L3: */
}
/* L4: */
}
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
par[icp[i]] += ep;
fftr_(ndim, &u[1], uold, &icp[1], &par[1], blwif_1.f1xx, &blicn_1.ndm,
blwif_1.dfuxx, blwif_1.dfpxx);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdp[j + icp[i] * dfdp_dim1] = (blwif_1.f1xx[j - 1] - f[j]) / ep;
/* L5: */
}
par[icp[i]] -= ep;
/* L6: */
}
return 0;
} /* fntr_ */
/* ---------- ---- */
/* Subroutine */ int fftr_(ndim, u, uold, icp, par, f, ndm, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par, *f;
integer *ndm;
doublereal *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
static integer ijac;
extern /* Subroutine */ int funi_();
static integer i, j;
static doublereal c1;
static integer ndm2;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dfdp_dim1 = *ndm;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndm;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
ijac = 1;
c1 = par[11];
funi_(ndm, &u[1], uold, &icp[1], &par[1], &ijac, &f[1], &dfdu[dfdu_offset]
, &dfdp[dfdp_offset]);
ndm2 = *ndm << 1;
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndm + i] = blrcn_1.zero;
f[ndm2 + i] = blrcn_1.zero;
i__2 = *ndm;
for (j = 1; j <= i__2; ++j) {
f[*ndm + i] += dfdu[i + j * dfdu_dim1] * u[*ndm + j];
f[ndm2 + i] += dfdu[i + j * dfdu_dim1] * u[ndm2 + j];
/* L1: */
}
f[*ndm + i] = c1 * f[*ndm + i];
f[ndm2 + i] = c1 * f[ndm2 + i];
f[i] = c1 * f[i];
/* L2: */
}
return 0;
} /* fftr_ */
/* ---------- ---- */
/* Subroutine */ int bctr_(ndim, par, icp, nbc, u0, u1, f, ijac, dbc)
integer *ndim;
doublereal *par;
integer *icp, *nbc;
doublereal *u0, *u1, *f;
integer *ijac;
doublereal *dbc;
{
/* System generated locals */
integer dbc_dim1, dbc_offset, i__1, i__2;
/* Builtin functions */
double sin(), cos();
/* Local variables */
static integer i, j;
static doublereal cs;
static integer nn;
static doublereal ss, sig;
static integer ndm2;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dbc_dim1 = *nbc;
dbc_offset = dbc_dim1 + 1;
dbc -= dbc_offset;
--f;
--u1;
--u0;
--icp;
--par;
/* Function Body */
ndm2 = blicn_1.ndm << 1;
sig = par[12];
ss = sin(sig);
/* SGLE SS= SIN(SIG) */
cs = cos(sig);
/* SGLE CS= COS(SIG) */
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
f[i] = u0[i] - u1[i];
f[blicn_1.ndm + i] = u1[blicn_1.ndm + i] - cs * u0[blicn_1.ndm + i] +
ss * u0[ndm2 + i];
f[ndm2 + i] = u1[ndm2 + i] - cs * u0[ndm2 + i] - ss * u0[blicn_1.ndm
+ i];
/* L1: */
}
if (blrtn.irot != 0) {
for (i= 1; i <= i__1; ++i) {
if (blrtn.nrot[i- 1] != 0) {
f[i] += blrtn.torper* blrtn.nrot[i- 1];
}
}
}
if (*ijac == 0) {
return 0;
}
nn = (*ndim << 1) + blicn_1.npar;
i__1 = *nbc;
for (i = 1; i <= i__1; ++i) {
i__2 = nn;
for (j = 1; j <= i__2; ++j) {
dbc[i + j * dbc_dim1] = blrcn_1.zero;
/* L2: */
}
/* L3: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
dbc[i + i * dbc_dim1] = 1.;
dbc[i + (*ndim + i) * dbc_dim1] = -1.;
dbc[blicn_1.ndm + i + (blicn_1.ndm + i) * dbc_dim1] = -cs;
dbc[blicn_1.ndm + i + (ndm2 + i) * dbc_dim1] = ss;
dbc[blicn_1.ndm + i + (*ndim + blicn_1.ndm + i) * dbc_dim1] = 1.;
dbc[blicn_1.ndm + i + ((*ndim << 1) + icp[4]) * dbc_dim1] = cs * u0[
ndm2 + i] + ss * u0[blicn_1.ndm + i];
dbc[ndm2 + i + (blicn_1.ndm + i) * dbc_dim1] = -ss;
dbc[ndm2 + i + (ndm2 + i) * dbc_dim1] = -cs;
dbc[ndm2 + i + (*ndim + ndm2 + i) * dbc_dim1] = 1.;
dbc[ndm2 + i + ((*ndim << 1) + icp[4]) * dbc_dim1] = ss * u0[ndm2 + i]
- cs * u0[blicn_1.ndm + i];
/* L4: */
}
return 0;
} /* bctr_ */
/* ---------- ---- */
/* Subroutine */ int ictr_(ndim, par, icp, nint, u, uold, udot, upold, f,
ijac, dint)
integer *ndim;
doublereal *par;
integer *icp, *nint;
doublereal *u, *uold, *udot, *upold, *f;
integer *ijac;
doublereal *dint;
{
/* System generated locals */
integer dint_dim1, dint_offset, i__1, i__2;
/* Local variables */
static integer i, j, nn, ndm2;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dint_dim1 = *nint;
dint_offset = dint_dim1 + 1;
dint -= dint_offset;
--f;
--upold;
--udot;
--uold;
--u;
--icp;
--par;
/* Function Body */
f[1] = blrcn_1.zero;
f[2] = blrcn_1.zero;
f[3] = -par[13];
ndm2 = blicn_1.ndm << 1;
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
if (blrtn.nrot[i- 1] == 0) {
f[1] += u[i] * upold[i];
}
f[2] = f[2] + u[blicn_1.ndm + i] * uold[ndm2 + i] - u[ndm2 + i] *
uold[blicn_1.ndm + i];
f[3] = f[3] + u[blicn_1.ndm + i] * u[blicn_1.ndm + i] + u[ndm2 + i] *
u[ndm2 + i];
/* L1: */
}
if (*ijac == 0) {
return 0;
}
nn = *ndim + blicn_1.npar;
i__1 = *nint;
for (i = 1; i <= i__1; ++i) {
i__2 = nn;
for (j = 1; j <= i__2; ++j) {
dint[i + j * dint_dim1] = blrcn_1.zero;
/* L2: */
}
/* L3: */
}
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
if (blrtn.nrot[i- 1] == 0) {
dint[i * dint_dim1 + 1] = upold[i];
}else
{dint[i * dint_dim1 + 1] = 0.;}
dint[(blicn_1.ndm + i) * dint_dim1 + 2] = uold[ndm2 + i];
dint[(ndm2 + i) * dint_dim1 + 2] = -uold[blicn_1.ndm + i];
dint[(blicn_1.ndm + i) * dint_dim1 + 3] = blrcn_1.two * u[blicn_1.ndm
+ i];
dint[(ndm2 + i) * dint_dim1 + 3] = blrcn_1.two * u[ndm2 + i];
/* L4: */
}
dint[(*ndim + 13) * dint_dim1 + 3] = -blrcn_1.one;
return 0;
} /* ictr_ */
/* ---------- ------ */
/* Subroutine */ int stpntr_(ntstrs, ncolrs, lab, ibr, m1u, u, ups, udotps,
upoldp, tm, dtm, ndim2, smat, rnllv, ir, ic, f, dfdu, dfdp, nodir)
integer *ntstrs, *ncolrs, *lab, *ibr, *m1u;
doublereal *u, *ups, *udotps, *upoldp, *tm, *dtm;
integer *ndim2;
doublereal *smat, *rnllv;
integer *ir, *ic;
doublereal *f, *dfdu, *dfdp;
integer *nodir;
{
/* Format strings */
static char fmt_101[] = "(4x,1p7e18.10)";
/* System generated locals */
integer ups_dim1, ups_offset, udotps_dim1, udotps_offset, upoldp_dim1,
upoldp_offset, smat_dim1, smat_offset, dfdu_dim1, dfdu_offset,
dfdp_dim1, dfdp_offset, i__1, i__2, i__3;
/* Builtin functions */
integer s_rsle(), do_lio(), e_rsle(), s_rsfe(), do_fio(), e_rsfe();
double sin();
/* Local variables */
static doublereal temp[7];
static integer ntpl1, nrsp1, ntot1, i, j, k;
static logical found;
static integer icprs[20], k1, k2, k3;
extern /* Subroutine */ int findl3_();
static integer nfpar1, nskip1, k2p1, lab1, nar1, itp1, isw1;
/* Fortran I/O blocks */
static cilist io___207 = { 0, 3, 0, 0, 0 };
static cilist io___220 = { 0, 3, 0, fmt_101, 0 };
static cilist io___225 = { 0, 3, 0, fmt_101, 0 };
static cilist io___226 = { 0, 3, 0, fmt_101, 0 };
static cilist io___227 = { 0, 3, 0, fmt_101, 0 };
static cilist io___228 = { 0, 3, 0, fmt_101, 0 };
static cilist io___229 = { 0, 3, 0, fmt_101, 0 };
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates starting data for the 2-parameter continuation of torus */
/* bifurcations. */
/* Parameter adjustments */
dfdp_dim1 = blbcn_1.ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = blbcn_1.ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--ic;
--ir;
--rnllv;
smat_dim1 = *ndim2;
smat_offset = smat_dim1 + 1;
smat -= smat_offset;
--dtm;
--tm;
upoldp_dim1 = *m1u;
upoldp_offset = upoldp_dim1 + 1;
upoldp -= upoldp_offset;
udotps_dim1 = *m1u;
udotps_offset = udotps_dim1 + 1;
udotps -= udotps_offset;
ups_dim1 = *m1u;
ups_offset = ups_dim1 + 1;
ups -= ups_offset;
--u;
/* Function Body */
findl3_(&blbcn_1.irs, &itp1, &nfpar1, &found);
s_rsle(&io___207);
do_lio(&c__3, &c__1, (char *)&(*ibr), (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&ntot1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&itp1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&lab1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&nfpar1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&isw1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&ntpl1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&nar1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&nskip1, (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&(*ntstrs), (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&(*ncolrs), (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&icprs[0], (ftnlen)sizeof(integer));
do_lio(&c__3, &c__1, (char *)&icprs[1], (ftnlen)sizeof(integer));
e_rsle();
nrsp1 = *ntstrs + 1;
i__1 = *ntstrs;
for (j = 1; j <= i__1; ++j) {
i__2 = *ncolrs;
for (i = 1; i <= i__2; ++i) {
k1 = (i - 1) * blbcn_1.ndim + 1;
k2 = k1 + blicn_1.ndm - 1;
s_rsfe(&io___220);
do_fio(&c__1, (char *)&temp[i - 1], (ftnlen)sizeof(doublereal));
i__3 = k2;
for (k = k1; k <= i__3; ++k) {
do_fio(&c__1, (char *)&ups[j + k * ups_dim1], (ftnlen)sizeof(
doublereal));
}
e_rsfe();
k2p1 = k2 + 1;
k3 = k2 + blicn_1.ndm;
i__3 = k3;
for (k = k2p1; k <= i__3; ++k) {
ups[j + k * ups_dim1] = blrcn_1.rsmall * sin(temp[i - 1]);
/* SGLE UPS(J,K)=RSMALL* SIN(TEMP(I)) */
ups[j + (k + blicn_1.ndm) * ups_dim1] = blrcn_1.zero;
/* L1: */
}
/* L2: */
}
tm[j] = temp[0];
/* L3: */
}
s_rsfe(&io___225);
do_fio(&c__1, (char *)&tm[nrsp1], (ftnlen)sizeof(doublereal));
i__1 = blicn_1.ndm;
for (k = 1; k <= i__1; ++k) {
do_fio(&c__1, (char *)&ups[nrsp1 + k * ups_dim1], (ftnlen)sizeof(
doublereal));
}
e_rsfe();
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
ups[nrsp1 + (blicn_1.ndm + i) * ups_dim1] = blrcn_1.zero;
ups[nrsp1 + ((blicn_1.ndm << 1) + i) * ups_dim1] = blrcn_1.zero;
/* L4: */
}
s_rsfe(&io___226);
do_fio(&c__1, (char *)&blcrl_1.rldot[0], (ftnlen)sizeof(doublereal));
do_fio(&c__1, (char *)&blcrl_1.rldot[2], (ftnlen)sizeof(doublereal));
e_rsfe();
blcrl_1.rldot[1] = blrcn_1.zero;
blcrl_1.rldot[3] = blrcn_1.zero;
/* Read the direction vector and initialize the starting direction. */
i__1 = *ntstrs;
for (j = 1; j <= i__1; ++j) {
i__2 = *ncolrs;
for (i = 1; i <= i__2; ++i) {
k1 = (i - 1) * blbcn_1.ndim + 1;
k2 = k1 + blicn_1.ndm - 1;
s_rsfe(&io___227);
i__3 = k2;
for (k = k1; k <= i__3; ++k) {
do_fio(&c__1, (char *)&udotps[j + k * udotps_dim1], (ftnlen)
sizeof(doublereal));
}
e_rsfe();
k2p1 = k2 + 1;
k3 = k2 + blicn_1.ndm;
i__3 = k3;
for (k = k2p1; k <= i__3; ++k) {
udotps[j + k * udotps_dim1] = blrcn_1.zero;
udotps[j + (k + blicn_1.ndm) * udotps_dim1] = blrcn_1.zero;
/* L5: */
}
/* L6: */
}
/* L7: */
}
s_rsfe(&io___228);
i__1 = blicn_1.ndm;
for (k = 1; k <= i__1; ++k) {
do_fio(&c__1, (char *)&udotps[nrsp1 + k * udotps_dim1], (ftnlen)
sizeof(doublereal));
}
e_rsfe();
i__1 = blicn_1.ndm;
for (i = 1; i <= i__1; ++i) {
udotps[nrsp1 + (blicn_1.ndm + i) * udotps_dim1] = blrcn_1.zero;
udotps[nrsp1 + ((blicn_1.ndm << 1) + i) * udotps_dim1] = blrcn_1.zero;
/* L8: */
}
/* Read the parameter values. */
s_rsfe(&io___229);
i__1 = blicn_1.npar;
for (i = 1; i <= i__1; ++i) {
do_fio(&c__1, (char *)&blbcn_1.par[i - 1], (ftnlen)sizeof(doublereal))
;
}
e_rsfe();
blbcn_1.par[12] = blrcn_1.zero;
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
blcrl_1.rl[i - 1] = blbcn_1.par[blbcn_1.icp[i - 1] - 1];
/* L9: */
}
*nodir = 0;
return 0;
} /* stpntr_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Periodic Solutions and Fixed Period Orbits */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int fnps_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
extern /* Subroutine */ int funi_();
static integer i, j;
static doublereal rho;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates the equations for the continuation of periodic orbits. */
/* Generate the function. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
funi_(ndim, &u[1], uold, &icp[1], &par[1], ijac, &f[1], &dfdu[dfdu_offset]
, &dfdp[dfdp_offset]);
rho = par[icp[2]];
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
dfdp[i + icp[2] * dfdp_dim1] = f[i];
f[i] = rho * dfdp[i + icp[2] * dfdp_dim1];
/* L1: */
}
if (*ijac == 0) {
return 0;
}
/* Generate the Jacobian. */
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[i + j * dfdu_dim1] = rho * dfdu[i + j * dfdu_dim1];
/* L2: */
}
dfdp[i + icp[1] * dfdp_dim1] = rho * dfdp[i + icp[1] * dfdp_dim1];
/* L3: */
}
return 0;
} /* fnps_ */
/* ---------- ---- */
/* Subroutine */ int fnfp_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
extern /* Subroutine */ int funi_();
static integer i, j;
static doublereal rho;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates the equations for the 2-parameter continuation of */
/* periodic orbits of fixed period. */
/* Generate the function. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
rho = par[icp[3]];
funi_(ndim, &u[1], uold, &icp[1], &par[1], ijac, &f[1], &dfdu[dfdu_offset]
, &dfdp[dfdp_offset]);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
f[i] = rho * f[i];
/* L1: */
}
if (*ijac == 0) {
return 0;
}
/* Generate the Jacobian. */
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[i + j * dfdu_dim1] = rho * dfdu[i + j * dfdu_dim1];
/* L2: */
}
for (j = 1; j <= 2; ++j) {
dfdp[i + icp[j] * dfdp_dim1] = rho * dfdp[i + icp[j] * dfdp_dim1];
/* L3: */
}
/* L4: */
}
return 0;
} /* fnfp_ */
/* ---------- ---- */
/* Subroutine */ int bcps_(ndim, par, icp, nbc, u0, u1, f, ijac, dbc)
integer *ndim;
doublereal *par;
integer *icp, *nbc;
doublereal *u0, *u1, *f;
integer *ijac;
doublereal *dbc;
{
/* System generated locals */
integer dbc_dim1, dbc_offset, i__1, i__2;
/* Local variables */
static integer i, j, nn;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dbc_dim1 = *nbc;
dbc_offset = dbc_dim1 + 1;
dbc -= dbc_offset;
--f;
--u1;
--u0;
--icp;
--par;
/* Function Body */
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
f[i] = u0[i] - u1[i];
/* L1: */
}
if (blrtn.irot != 0) {
i__1 = *ndim;
for (i= 1; i <= i__1; ++i) {
if (blrtn.nrot[i- 1] != 0) {
f[i] += blrtn.torper* blrtn.nrot[i- 1];
}
}
}
if (*ijac == 0) {
return 0;
}
nn = (*ndim << 1) + blicn_1.npar;
i__1 = *nbc;
for (i = 1; i <= i__1; ++i) {
i__2 = nn;
for (j = 1; j <= i__2; ++j) {
dbc[i + j * dbc_dim1] = blrcn_1.zero;
/* L2: */
}
/* L3: */
}
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
dbc[i + i * dbc_dim1] = blrcn_1.one;
dbc[i + (*ndim + i) * dbc_dim1] = -blrcn_1.one;
/* L4: */
}
return 0;
} /* bcps_ */
/* ---------- ---- */
/* Subroutine */ int icps_(ndim, par, icp, nint, u, uold, udot, upold, f,
ijac, dint)
integer *ndim;
doublereal *par;
integer *icp, *nint;
doublereal *u, *uold, *udot, *upold, *f;
integer *ijac;
doublereal *dint;
{
/* System generated locals */
integer dint_dim1, dint_offset, i__1, i__2;
/* Local variables */
static integer i, j, nn;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dint_dim1 = *nint;
dint_offset = dint_dim1 + 1;
dint -= dint_offset;
--f;
--upold;
--udot;
--uold;
--u;
--icp;
--par;
/* Function Body */
f[1] = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if(blrtn.nrot[i-1]==0){
f[1] += u[i] * upold[i];
}
/* L1: */
}
if (*ijac == 0) {
return 0;
}
nn = *ndim + blicn_1.npar;
i__1 = *nint;
for (i = 1; i <= i__1; ++i) {
i__2 = nn;
for (j = 1; j <= i__2; ++j) {
dint[i + j * dint_dim1] = blrcn_1.zero;
/* L2: */
}
/* L3: */
}
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
dint[i * dint_dim1 + 1] = upold[i];
/* L4: */
}
return 0;
} /* icps_ */
/* ---------- ----- */
/* Subroutine */ int pdble_(ndim, ntst, ncol, m1u, ups, udotps, tm, rho)
integer *ndim, *ntst, *ncol, *m1u;
doublereal *ups, *udotps, *tm, *rho;
{
/* System generated locals */
integer ups_dim1, ups_offset, udotps_dim1, udotps_offset, i__1, i__2,
i__3;
/* Local variables */
static integer i, j, i1, i2;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Preprocesses restart data for switching branches at a period doubling
*/
/* bifurcation. */
/* Parameter adjustments */
--tm;
udotps_dim1 = *m1u;
udotps_offset = udotps_dim1 + 1;
udotps -= udotps_offset;
ups_dim1 = *m1u;
ups_offset = ups_dim1 + 1;
ups -= ups_offset;
/* Function Body */
*rho = blrcn_1.two * *rho;
if (blrtn.irot != 0) {
blrtn.torper *= 2.;
}
i__1 = *ntst;
for (i = 1; i <= i__1; ++i) {
tm[i] = blrcn_1.half * tm[i];
tm[*ntst + i] = blrcn_1.half + tm[i];
/* L1: */
}
tm[(*ntst << 1) + 1] = blrcn_1.one;
i__1 = *ntst + 1;
for (j = 1; j <= i__1; ++j) {
i__2 = *ndim;
for (i1 = 1; i1 <= i__2; ++i1) {
i__3 = *ncol;
for (i2 = 1; i2 <= i__3; ++i2) {
i = (i2 - 1) * *ndim + i1;
ups[*ntst + j + i * ups_dim1] = ups[*ntst + 1 + i1 * ups_dim1]
+ ups[j + i * ups_dim1] - ups[i1 * ups_dim1 + 1];
udotps[*ntst + j + i * udotps_dim1] = udotps[*ntst + 1 + i1 *
udotps_dim1] + udotps[j + i * udotps_dim1] - udotps[
i1 * udotps_dim1 + 1];
/* L2: */
}
}
/* L3: */
}
*ntst <<= 1;
return 0;
} /* pdble_ */
/* ---------- ------ */
/* Subroutine */ int stpnps_(ntstrs, ncolrs, lab, ibr, m1u, u, ups, udotps,
upoldp, tm, dtm, ndim2, smat, rnllv, ir, ic, f, dfdu, dfdp, nodir)
integer *ntstrs, *ncolrs, *lab, *ibr, *m1u;
doublereal *u, *ups, *udotps, *upoldp, *tm, *dtm;
integer *ndim2;
doublereal *smat, *rnllv;
integer *ir, *ic;
doublereal *f, *dfdu, *dfdp;
integer *nodir;
{
/* System generated locals */
integer ups_dim1, ups_offset, udotps_dim1, udotps_offset, upoldp_dim1,
upoldp_offset, smat_dim1, smat_offset, dfdu_dim1, dfdu_offset,
dfdp_dim1, dfdp_offset, i__1, i__2, i__3;
/* Builtin functions */
double sin(), cos();
/* Local variables */
static integer ijac;
extern /* Subroutine */ int funi_(), nlvc_();
static doublereal uold, c;
static integer i, j, k;
static doublereal s, t, rimhb;
static logical found;
static integer k1;
extern /* Subroutine */ int nrmlz_(), readl3_(), findl3_();
static integer nfpar1;
static doublereal dt;
extern doublereal pi_();
extern /* Subroutine */ int scalebb_(), msh_();
static doublereal rho;
static integer itp;
static doublereal tpi;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates starting data for the continuation of a branch of periodic */
/* solutions from a Hopf bifurcation point. */
/* Parameter adjustments */
dfdp_dim1 = blbcn_1.ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = blbcn_1.ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--ic;
--ir;
--rnllv;
smat_dim1 = *ndim2;
smat_offset = smat_dim1 + 1;
smat -= smat_offset;
--dtm;
--tm;
upoldp_dim1 = *m1u;
upoldp_offset = upoldp_dim1 + 1;
upoldp -= upoldp_offset;
udotps_dim1 = *m1u;
udotps_offset = udotps_dim1 + 1;
udotps -= udotps_offset;
ups_dim1 = *m1u;
ups_offset = ups_dim1 + 1;
ups -= ups_offset;
--u;
/* Function Body */
findl3_(&blbcn_1.irs, &itp, &nfpar1, &found);
readl3_(&blbcn_1.ips, ibr, &u[1], blbcn_1.par);
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
blcrl_1.rl[i - 1] = blbcn_1.par[blbcn_1.icp[i - 1] - 1];
/* L1: */
}
rho = blbcn_1.par[10];
tpi = pi_(&blrcn_1.two);
rimhb = tpi / rho;
*ntstrs = blcde_1.ntst;
*ncolrs = blcde_1.ncol;
i__1 = *ndim2;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim2;
for (j = 1; j <= i__2; ++j) {
smat[i + j * smat_dim1] = blrcn_1.zero;
/* L2: */
}
/* L3: */
}
i__1 = blbcn_1.ndim;
for (i = 1; i <= i__1; ++i) {
smat[i + i * smat_dim1] = -rimhb;
smat[blbcn_1.ndim + i + (blbcn_1.ndim + i) * smat_dim1] = rimhb;
/* L4: */
}
ijac = 1;
funi_(&blbcn_1.ndim, &u[1], &uold, blbcn_1.icp, blbcn_1.par, &ijac, &f[1],
&dfdu[dfdu_offset], &dfdp[dfdp_offset]);
i__1 = blbcn_1.ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = blbcn_1.ndim;
for (j = 1; j <= i__2; ++j) {
smat[i + (blbcn_1.ndim + j) * smat_dim1] = dfdu[i + j * dfdu_dim1]
;
smat[blbcn_1.ndim + i + j * smat_dim1] = dfdu[i + j * dfdu_dim1];
/* L5: */
}
/* L6: */
}
nlvc_(ndim2, ndim2, &c__2, &smat[smat_offset], &rnllv[1], &ir[1], &ic[1]);
nrmlz_(ndim2, &rnllv[1]);
/* Generate the (initially uniform) mesh. */
msh_(&tm[1]);
dt = blrcn_1.one / blcde_1.ntst;
i__1 = blcde_1.ntst + 1;
for (j = 1; j <= i__1; ++j) {
t = tm[j];
s = sin(tpi * t);
/* SGLE S=SIN(TPI*T) */
c = cos(tpi * t);
/* SGLE C=COS(TPI*T) */
i__2 = blbcn_1.ndim;
for (k = 1; k <= i__2; ++k) {
udotps[j + k * udotps_dim1] = s * rnllv[k] + c * rnllv[
blbcn_1.ndim + k];
upoldp[j + k * upoldp_dim1] = c * rnllv[k] - s * rnllv[
blbcn_1.ndim + k];
ups[j + k * ups_dim1] = u[k];
/* L7: */
}
/* L8: */
}
i__1 = blcde_1.ncol - 1;
for (i = 1; i <= i__1; ++i) {
i__2 = blcde_1.ntst;
for (j = 1; j <= i__2; ++j) {
t = tm[j] + i * (tm[j + 1] - tm[j]) / blcde_1.ncol;
s = sin(tpi * t);
/* SGLE S=SIN(TPI*T) */
c = cos(tpi * t);
/* SGLE C=COS(TPI*T) */
i__3 = blbcn_1.ndim;
for (k = 1; k <= i__3; ++k) {
k1 = i * blbcn_1.ndim + k;
udotps[j + k1 * udotps_dim1] = s * rnllv[k] + c * rnllv[
blbcn_1.ndim + k];
upoldp[j + k1 * upoldp_dim1] = c * rnllv[k] - s * rnllv[
blbcn_1.ndim + k];
ups[j + k1 * ups_dim1] = u[k];
/* L9: */
}
/* L10: */
}
/* L11: */
}
blcrl_1.rldot[0] = blrcn_1.zero;
blcrl_1.rldot[1] = blrcn_1.zero;
i__1 = blcde_1.ntst;
for (i = 1; i <= i__1; ++i) {
dtm[i] = dt;
/* L12: */
}
scalebb_(m1u, &udotps[udotps_offset], blcrl_1.rldot, &dtm[1]);
*nodir = -1;
return 0;
} /* stpnps_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Travelling Wave Solutions to Diffusive Systems */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int fnws_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset;
/* Local variables */
extern /* Subroutine */ int ffws_();
static integer ndm2;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Sets up equations for the continuation of spatially homogeneous */
/* solutions to parabolic systems, for the purpose of finding */
/* bifurcations to travelling wave solutions. */
/* Generate the function. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
ndm2 = blicn_1.ndm / 2;
ffws_(ndim, &u[1], uold, &icp[1], &blicn_1.nfpar, &par[1], ijac, &f[1], &
dfdu[dfdu_offset], &dfdp[dfdp_offset], &ndm2, blwif_1.dfuxx,
blwif_1.dfpxx);
return 0;
} /* fnws_ */
/* ---------- ---- */
/* Subroutine */ int ffws_(ndim, u, uold, icp, nfpar, par, ijac, f, dfdu,
dfdp, ndm, dfuxx, dfpxx)
integer *ndim;
doublereal *u, *uold;
integer *icp, *nfpar;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
integer *ndm;
doublereal *dfuxx, *dfpxx;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, dfuxx_dim1,
dfuxx_offset, dfpxx_dim1, dfpxx_offset, i__1, i__2;
/* Local variables */
extern /* Subroutine */ int funi_();
static doublereal c;
static integer i, j;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dfpxx_dim1 = *ndm;
dfpxx_offset = dfpxx_dim1 + 1;
dfpxx -= dfpxx_offset;
dfuxx_dim1 = *ndm;
dfuxx_offset = dfuxx_dim1 + 1;
dfuxx -= dfuxx_offset;
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
c = par[10];
funi_(ndm, &u[1], uold, &icp[1], &par[1], ijac, &f[1], &dfuxx[
dfuxx_offset], &dfpxx[dfpxx_offset]);
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[*ndm + i] = -(c * u[*ndm + i] + f[i]) / par[i + 14];
f[i] = u[*ndm + i];
/* L1: */
}
if (*ijac == 0) {
return 0;
}
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndm;
for (j = 1; j <= i__2; ++j) {
dfdu[i + j * dfdu_dim1] = blrcn_1.zero;
dfdu[i + (j + *ndm) * dfdu_dim1] = blrcn_1.zero;
dfdu[i + *ndm + j * dfdu_dim1] = -dfuxx[i + j * dfuxx_dim1] / par[
i + 14];
dfdu[i + *ndm + (j + *ndm) * dfdu_dim1] = blrcn_1.zero;
/* L2: */
}
dfdu[i + (i + *ndm) * dfdu_dim1] = blrcn_1.one;
dfdu[i + *ndm + (i + *ndm) * dfdu_dim1] = -c / par[i + 14];
if (icp[1] < 10) {
dfdp[i + icp[1] * dfdp_dim1] = blrcn_1.zero;
dfdp[i + *ndm + icp[1] * dfdp_dim1] = -dfpxx[i + icp[1] *
dfpxx_dim1] / par[i + 14];
}
if (*nfpar > 1 && icp[2] < 10) {
dfdp[i + icp[2] * dfdp_dim1] = blrcn_1.zero;
dfdp[i + *ndm + icp[2] * dfdp_dim1] = -dfpxx[i + icp[2] *
dfpxx_dim1] / par[i + 14];
}
/* L3: */
}
/* Derivative with respect to the wave speed. */
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
dfdp[i + dfdp_dim1 * 10] = blrcn_1.zero;
dfdp[i + *ndm + dfdp_dim1 * 10] = -u[*ndm + i] / par[i + 14];
/* L4: */
}
/* Derivatives with respect to the diffusion coefficients. */
i__1 = *ndm;
for (j = 1; j <= i__1; ++j) {
i__2 = *ndm;
for (i = 1; i <= i__2; ++i) {
dfdp[i + (j + 14) * dfdp_dim1] = blrcn_1.zero;
dfdp[i + *ndm + (j + 14) * dfdp_dim1] = blrcn_1.zero;
/* L5: */
}
dfdp[j + *ndm + (j + 14) * dfdp_dim1] = -f[j + *ndm] / par[j + 14];
/* L6: */
}
return 0;
} /* ffws_ */
/* ---------- ---- */
/* Subroutine */ int fnwp_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
extern /* Subroutine */ int fnws_();
static integer i, j;
static doublereal rho;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Equations for the continuation of traveling waves. */
/* Generate the function and Jacobian. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
fnws_(ndim, &u[1], uold, &icp[1], &par[1], ijac, &f[1], &dfdu[dfdu_offset]
, &dfdp[dfdp_offset]);
rho = par[icp[2]];
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
dfdp[i + icp[2] * dfdp_dim1] = f[i];
f[i] = rho * f[i];
/* L1: */
}
if (*ijac == 0) {
return 0;
}
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[i + j * dfdu_dim1] = rho * dfdu[i + j * dfdu_dim1];
/* L2: */
}
}
i__2 = *ndim;
for (i = 1; i <= i__2; ++i) {
dfdp[i + icp[1] * dfdp_dim1] = rho * dfdp[i + icp[1] * dfdp_dim1];
/* L3: */
}
return 0;
} /* fnwp_ */
/* ---------- ---- */
/* Subroutine */ int fnwf_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
/* Local variables */
extern /* Subroutine */ int fnws_();
static integer i, j;
static doublereal rho;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates the equations for the two parameter continuation */
/* of wavetrains of fixed wave length. */
/* Generate the function and Jacobian. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--u;
/* Function Body */
fnws_(ndim, &u[1], uold, &icp[1], &par[1], ijac, &f[1], &dfdu[dfdu_offset]
, &dfdp[dfdp_offset]);
rho = par[icp[3]];
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
f[i] = rho * f[i];
/* L1: */
}
if (*ijac == 0) {
return 0;
}
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[i + j * dfdu_dim1] = rho * dfdu[i + j * dfdu_dim1];
/* L2: */
}
}
i__2 = *ndim;
for (i = 1; i <= i__2; ++i) {
for (j = 1; j <= 2; ++j) {
dfdp[i + icp[j] * dfdp_dim1] = rho * dfdp[i + icp[j] * dfdp_dim1];
/* L3: */
}
}
return 0;
} /* fnwf_ */
/* ---------- ------ */
/* Subroutine */ int stpnwp_(ntstrs, ncolrs, lab, ibr, m1u, u, ups, udotps,
upoldp, tm, dtm, ndim2, smat, rnllv, ir, ic, f, dfdu, dfdp, nodir)
integer *ntstrs, *ncolrs, *lab, *ibr, *m1u;
doublereal *u, *ups, *udotps, *upoldp, *tm, *dtm;
integer *ndim2;
doublereal *smat, *rnllv;
integer *ir, *ic;
doublereal *f, *dfdu, *dfdp;
integer *nodir;
{
/* System generated locals */
integer ups_dim1, ups_offset, udotps_dim1, udotps_offset, upoldp_dim1,
upoldp_offset, smat_dim1, smat_offset, dfdu_dim1, dfdu_offset,
dfdp_dim1, dfdp_offset, i__1, i__2, i__3;
/* Builtin functions */
double sin(), cos();
/* Local variables */
static integer ijac;
extern /* Subroutine */ int nlvc_();
static doublereal uold;
extern /* Subroutine */ int fnws_();
static doublereal c;
static integer i, j, k;
static doublereal s, t, rimhb;
static logical found;
static integer k1;
extern /* Subroutine */ int nrmlz_(), readl3_(), findl3_();
static integer nfpar1;
static doublereal dt;
extern doublereal pi_();
extern /* Subroutine */ int scalebb_(), msh_();
static doublereal rho;
static integer itp;
static doublereal tpi;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates starting data for the continuation of a branch of periodic */
/* solutions starting from a Hopf bifurcation point (Waves). */
/* Parameter adjustments */
dfdp_dim1 = blbcn_1.ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = blbcn_1.ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--ic;
--ir;
--rnllv;
smat_dim1 = *ndim2;
smat_offset = smat_dim1 + 1;
smat -= smat_offset;
--dtm;
--tm;
upoldp_dim1 = *m1u;
upoldp_offset = upoldp_dim1 + 1;
upoldp -= upoldp_offset;
udotps_dim1 = *m1u;
udotps_offset = udotps_dim1 + 1;
udotps -= udotps_offset;
ups_dim1 = *m1u;
ups_offset = ups_dim1 + 1;
ups -= ups_offset;
--u;
/* Function Body */
findl3_(&blbcn_1.irs, &itp, &nfpar1, &found);
readl3_(&blbcn_1.ips, ibr, &u[1], blbcn_1.par);
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
blcrl_1.rl[i - 1] = blbcn_1.par[blbcn_1.icp[i - 1] - 1];
/* L1: */
}
rho = blbcn_1.par[10];
tpi = pi_(&blrcn_1.two);
rimhb = tpi / rho;
*ntstrs = blcde_1.ntst;
*ncolrs = blcde_1.ncol;
i__1 = *ndim2;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim2;
for (j = 1; j <= i__2; ++j) {
smat[i + j * smat_dim1] = blrcn_1.zero;
/* L2: */
}
/* L3: */
}
i__1 = blbcn_1.ndim;
for (i = 1; i <= i__1; ++i) {
smat[i + i * smat_dim1] = -rimhb;
smat[blbcn_1.ndim + i + (blbcn_1.ndim + i) * smat_dim1] = rimhb;
/* L4: */
}
ijac = 1;
fnws_(&blbcn_1.ndim, &u[1], &uold, blbcn_1.icp, blbcn_1.par, &ijac, &f[1],
&dfdu[dfdu_offset], &dfdp[dfdp_offset]);
i__1 = blbcn_1.ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = blbcn_1.ndim;
for (j = 1; j <= i__2; ++j) {
smat[i + (blbcn_1.ndim + j) * smat_dim1] = dfdu[i + j * dfdu_dim1]
;
smat[blbcn_1.ndim + i + j * smat_dim1] = dfdu[i + j * dfdu_dim1];
/* L5: */
}
/* L6: */
}
nlvc_(ndim2, ndim2, &c__2, &smat[smat_offset], &rnllv[1], &ir[1], &ic[1]);
nrmlz_(ndim2, &rnllv[1]);
/* Generate the (initially uniform) mesh. */
msh_(&tm[1]);
dt = blrcn_1.one / blcde_1.ntst;
i__1 = blcde_1.ntst + 1;
for (j = 1; j <= i__1; ++j) {
t = tm[j];
s = sin(tpi * t);
/* SGLE S=SIN(TPI*T) */
c = cos(tpi * t);
/* SGLE C=COS(TPI*T) */
i__2 = blbcn_1.ndim;
for (k = 1; k <= i__2; ++k) {
udotps[j + k * udotps_dim1] = s * rnllv[k] + c * rnllv[
blbcn_1.ndim + k];
upoldp[j + k * upoldp_dim1] = c * rnllv[k] - s * rnllv[
blbcn_1.ndim + k];
ups[j + k * ups_dim1] = u[k];
/* L7: */
}
/* L8: */
}
i__1 = blcde_1.ncol - 1;
for (i = 1; i <= i__1; ++i) {
i__2 = blcde_1.ntst;
for (j = 1; j <= i__2; ++j) {
t = tm[j] + i * (tm[j + 1] - tm[j]) / blcde_1.ncol;
s = sin(tpi * t);
/* SGLE S=SIN(TPI*T) */
c = cos(tpi * t);
/* SGLE C=COS(TPI*T) */
i__3 = blbcn_1.ndim;
for (k = 1; k <= i__3; ++k) {
k1 = i * blbcn_1.ndim + k;
udotps[j + k1 * udotps_dim1] = s * rnllv[k] + c * rnllv[
blbcn_1.ndim + k];
upoldp[j + k1 * upoldp_dim1] = c * rnllv[k] - s * rnllv[
blbcn_1.ndim + k];
ups[j + k1 * ups_dim1] = u[k];
/* L9: */
}
/* L10: */
}
/* L11: */
}
blcrl_1.rldot[0] = blrcn_1.zero;
blcrl_1.rldot[1] = blrcn_1.zero;
i__1 = blcde_1.ntst;
for (i = 1; i <= i__1; ++i) {
dtm[i] = dt;
/* L12: */
}
scalebb_(m1u, &udotps[udotps_offset], blcrl_1.rldot, &dtm[1]);
*nodir = -1;
return 0;
} /* stpnwp_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Diffusive Systems : Time Evolution */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int fnpe_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset;
/* Local variables */
extern /* Subroutine */ int ffpe_();
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Generates the equations for taking one time step (Implicit Euler). */
/* Generate the function and Jacobian. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--uold;
--u;
/* Function Body */
ffpe_(ndim, &u[1], &uold[1], &icp[1], &par[1], ijac, &f[1], &dfdu[
dfdu_offset], &dfdp[dfdp_offset], &blicn_1.ndm, blwif_1.dfuxx,
blwif_1.dfpxx);
return 0;
} /* fnpe_ */
/* ---------- ---- */
/* Subroutine */ int ffpe_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp, ndm,
dfuxx, dfpxx)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
integer *ndm;
doublereal *dfuxx, *dfpxx;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, dfuxx_dim1,
dfuxx_offset, dfpxx_dim1, dfpxx_offset, i__1, i__2;
doublereal d__1;
/* Local variables */
extern /* Subroutine */ int funi_();
static integer i, j;
static doublereal t, dt, rho;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Parameter adjustments */
dfpxx_dim1 = *ndm;
dfpxx_offset = dfpxx_dim1 + 1;
dfpxx -= dfpxx_offset;
dfuxx_dim1 = *ndm;
dfuxx_offset = dfuxx_dim1 + 1;
dfuxx -= dfuxx_offset;
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--uold;
--u;
/* Function Body */
rho = par[11];
t = par[icp[1]];
dt = t - blcrl_1.rlold[0];
if (abs(dt) < bldls_1.dsmin) {
dt = bldls_1.ds;
}
/* SGLE IF( ABS(DT).LT.DSMIN)DT=DS */
funi_(ndm, &u[1], &uold[1], &icp[1], &par[1], ijac, &f[*ndm + 1], &dfuxx[
dfuxx_offset], &dfpxx[dfpxx_offset]);
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
f[i] = rho * u[*ndm + i];
f[*ndm + i] = rho * ((u[i] - uold[i]) / dt - f[*ndm + i]) / par[i +
14];
/* L1: */
}
if (*ijac == 0) {
return 0;
}
i__1 = *ndm;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndm;
for (j = 1; j <= i__2; ++j) {
dfdu[i + j * dfdu_dim1] = blrcn_1.zero;
dfdu[i + (j + *ndm) * dfdu_dim1] = blrcn_1.zero;
dfdu[i + *ndm + j * dfdu_dim1] = -rho * dfuxx[i + j * dfuxx_dim1]
/ par[i + 14];
dfdu[i + *ndm + (j + *ndm) * dfdu_dim1] = blrcn_1.zero;
/* L2: */
}
dfdu[i + (i + *ndm) * dfdu_dim1] = rho;
dfdu[i + *ndm + i * dfdu_dim1] += rho / (dt * par[i + 14]);
dfdp[i + icp[1] * dfdp_dim1] = blrcn_1.zero;
/* Computing 2nd power */
d__1 = dt;
dfdp[i + *ndm + icp[1] * dfdp_dim1] = -rho * (u[i] - uold[i]) / (d__1
* d__1 * par[i + 14]);
/* L3: */
}
return 0;
} /* ffpe_ */
/* Subroutine */ int icpe_(ndim, par, icp, nint, u, uold, udot, upold, f,
ijac, dint)
integer *ndim;
real *par;
integer *icp, *nint;
real *u, *uold, *udot, *upold, *f;
integer *ijac;
real *dint;
{
/* ---------- ---- */
/* Dummy integral condition subroutine for parabolic systems. */
return 0;
} /* icpe_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Routines for Interface with User Supplied Routines */
/* (To generate Jacobian by differencing, if not supplied analytically) */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------- ---- */
/* Subroutine */ int funi_(ndim, u, uold, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u, *uold;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer dfdu_dim1, dfdu_offset, dfdp_dim1, dfdp_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int func_();
static integer i, j;
static doublereal ep, umx;
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Interface subroutine to user supplied FUNC. */
/* Generate the function. */
/* Parameter adjustments */
dfdp_dim1 = *ndim;
dfdp_offset = dfdp_dim1 + 1;
dfdp -= dfdp_offset;
dfdu_dim1 = *ndim;
dfdu_offset = dfdu_dim1 + 1;
dfdu -= dfdu_offset;
--f;
--par;
--icp;
--uold;
--u;
/* Function Body */
func_(ndim, &u[1], &icp[1], &par[1], ijac, &f[1], &dfdu[dfdu_offset], &
dfdp[dfdp_offset]);
if (blmax_1.jac == 1 || *ijac == 0) {
return 0;
}
/* Generate the Jacobian by differencing. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u[i], abs(d__1)) > umx) {
umx = (d__2 = u[i], abs(d__2));
}
/* SGLE IF( ABS(U(I)).GT.UMX)UMX= ABS(U(I)) */
/* L1: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
bldif_1.u1zz[j - 1] = u[j];
bldif_1.u2zz[j - 1] = u[j];
/* L2: */
}
bldif_1.u1zz[i - 1] -= ep;
bldif_1.u2zz[i - 1] += ep;
func_(ndim, bldif_1.u1zz, &icp[1], &par[1], &c__0, bldif_1.f1zz, &
dfdu[dfdu_offset], &dfdp[dfdp_offset]);
func_(ndim, bldif_1.u2zz, &icp[1], &par[1], &c__0, bldif_1.f2zz, &
dfdu[dfdu_offset], &dfdp[dfdp_offset]);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdu[j + i * dfdu_dim1] = (bldif_1.f2zz[j - 1] - bldif_1.f1zz[j -
1]) / (ep * 2);
/* L3: */
}
/* L4: */
}
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
ep = blrcn_1.hmach * (blrcn_1.one + (d__1 = par[icp[i]], abs(d__1)));
/* SGLE EP=HMACH*( ONE + ABS(PAR(ICP(I))) ) */
par[icp[i]] += ep;
func_(ndim, &u[1], &icp[1], &par[1], &c__0, bldif_1.f1zz, &dfdu[
dfdu_offset], &dfdp[dfdp_offset]);
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
dfdp[j + icp[i] * dfdp_dim1] = (bldif_1.f1zz[j - 1] - f[j]) / ep;
/* L5: */
}
par[icp[i]] -= ep;
/* L6: */
}
return 0;
} /* funi_ */
/* Subroutine */ int bcni_(ndim, par, icp, nbc, u0, u1, f, ijac, dbc)
integer *ndim;
doublereal *par;
integer *icp, *nbc;
doublereal *u0, *u1, *f;
integer *ijac;
doublereal *dbc;
{
/* System generated locals */
integer dbc_dim1, dbc_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int bcnd_();
static integer i, j;
static doublereal ep, umx;
/* ---------- ---- */
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Interface subroutine to the user supplied BCND. */
/* Generate the function. */
/* Parameter adjustments */
dbc_dim1 = *nbc;
dbc_offset = dbc_dim1 + 1;
dbc -= dbc_offset;
--f;
--u1;
--u0;
--icp;
--par;
/* Function Body */
bcnd_(ndim, &par[1], &icp[1], nbc, &u0[1], &u1[1], &f[1], ijac, &dbc[
dbc_offset]);
if (blmax_1.jac == 1 || *ijac == 0) {
return 0;
}
/* Generate the Jacobian by differencing. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u0[i], abs(d__1)) > umx) {
umx = (d__2 = u0[i], abs(d__2));
}
/* SGLE IF( ABS(U0(I)).GT.UMX)UMX= ABS(U0(I)) */
/* L1: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
bldif_1.u1zz[j - 1] = u0[j];
bldif_1.u2zz[j - 1] = u0[j];
/* L2: */
}
bldif_1.u1zz[i - 1] -= ep;
bldif_1.u2zz[i - 1] += ep;
bcnd_(ndim, &par[1], &icp[1], nbc, bldif_1.u1zz, &u1[1], bldif_1.f1zz,
&c__0, &dbc[dbc_offset]);
bcnd_(ndim, &par[1], &icp[1], nbc, bldif_1.u2zz, &u1[1], bldif_1.f2zz,
&c__0, &dbc[dbc_offset]);
i__2 = *nbc;
for (j = 1; j <= i__2; ++j) {
dbc[j + i * dbc_dim1] = (bldif_1.f2zz[j - 1] - bldif_1.f1zz[j - 1]
) / (ep * 2);
/* L3: */
}
/* L4: */
}
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u1[i], abs(d__1)) > umx) {
umx = (d__2 = u1[i], abs(d__2));
}
/* SGLE IF( ABS(U1(I)).GT.UMX)UMX= ABS(U1(I)) */
/* L5: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
bldif_1.u1zz[j - 1] = u1[j];
bldif_1.u2zz[j - 1] = u1[j];
/* L6: */
}
bldif_1.u1zz[i - 1] -= ep;
bldif_1.u2zz[i - 1] += ep;
bcnd_(ndim, &par[1], &icp[1], nbc, &u0[1], bldif_1.u1zz, bldif_1.f1zz,
&c__0, &dbc[dbc_offset]);
bcnd_(ndim, &par[1], &icp[1], nbc, &u0[1], bldif_1.u2zz, bldif_1.f2zz,
&c__0, &dbc[dbc_offset]);
i__2 = *nbc;
for (j = 1; j <= i__2; ++j) {
dbc[j + (*ndim + i) * dbc_dim1] = (bldif_1.f2zz[j - 1] -
bldif_1.f1zz[j - 1]) / (ep * 2);
/* L7: */
}
/* L8: */
}
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
ep = blrcn_1.hmach * (blrcn_1.one + (d__1 = par[icp[i]], abs(d__1)));
/* SGLE EP=HMACH*( ONE + ABS(PAR(ICP(I))) ) */
par[icp[i]] += ep;
bcnd_(ndim, &par[1], &icp[1], nbc, &u0[1], &u1[1], bldif_1.f1zz, &
c__0, &dbc[dbc_offset]);
i__2 = *nbc;
for (j = 1; j <= i__2; ++j) {
dbc[j + ((*ndim << 1) + icp[i]) * dbc_dim1] = (bldif_1.f1zz[j - 1]
- f[j]) / ep;
/* L9: */
}
par[icp[i]] -= ep;
/* L10: */
}
return 0;
} /* bcni_ */
/* Subroutine */ int icni_(ndim, par, icp, nint, u, uold, udot, upold, f,
ijac, dint)
integer *ndim;
doublereal *par;
integer *icp, *nint;
doublereal *u, *uold, *udot, *upold, *f;
integer *ijac;
doublereal *dint;
{
/* System generated locals */
integer dint_dim1, dint_offset, i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int icnd_();
static integer i, j;
static doublereal ep, umx;
/* ---------- ---- */
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Interface subroutine to user supplied ICND. */
/* Generate the integrand. */
/* Parameter adjustments */
dint_dim1 = *nint;
dint_offset = dint_dim1 + 1;
dint -= dint_offset;
--f;
--upold;
--udot;
--uold;
--u;
--icp;
--par;
/* Function Body */
icnd_(ndim, &par[1], &icp[1], nint, &u[1], &uold[1], &udot[1], &upold[1],
&f[1], ijac, &dint[dint_offset]);
if (blmax_1.jac == 1 || *ijac == 0) {
return 0;
}
/* Generate the Jacobian by differencing. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u[i], abs(d__1)) > umx) {
umx = (d__2 = u[i], abs(d__2));
}
/* SGLE IF( ABS(U(I)).GT.UMX)UMX= ABS(U(I)) */
/* L1: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
bldif_1.u1zz[j - 1] = u[j];
bldif_1.u2zz[j - 1] = u[j];
/* L2: */
}
bldif_1.u1zz[i - 1] -= ep;
bldif_1.u2zz[i - 1] += ep;
icnd_(ndim, &par[1], &icp[1], nint, bldif_1.u1zz, &uold[1], &udot[1],
&upold[1], bldif_1.f1zz, &c__0, &dint[dint_offset]);
icnd_(ndim, &par[1], &icp[1], nint, bldif_1.u2zz, &uold[1], &udot[1],
&upold[1], bldif_1.f2zz, &c__0, &dint[dint_offset]);
i__2 = *nint;
for (j = 1; j <= i__2; ++j) {
dint[j + i * dint_dim1] = (bldif_1.f2zz[j - 1] - bldif_1.f1zz[j -
1]) / (ep * 2);
/* L3: */
}
/* L4: */
}
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
ep = blrcn_1.hmach * (blrcn_1.one + (d__1 = par[icp[i]], abs(d__1)));
/* SGLE EP=HMACH*( ONE + ABS(PAR(ICP(I))) ) */
par[icp[i]] += ep;
icnd_(ndim, &par[1], &icp[1], nint, &u[1], &uold[1], &udot[1], &upold[
1], bldif_1.f1zz, &c__0, &dint[dint_offset]);
i__2 = *nint;
for (j = 1; j <= i__2; ++j) {
dint[j + (*ndim + icp[i]) * dint_dim1] = (bldif_1.f1zz[j - 1] - f[
j]) / ep;
/* L5: */
}
par[icp[i]] -= ep;
/* L6: */
}
return 0;
} /* icni_ */
/* Subroutine */ int fopi_(ndim, u, icp, par, ijac, f, dfdu, dfdp)
integer *ndim;
doublereal *u;
integer *icp;
doublereal *par;
integer *ijac;
doublereal *f, *dfdu, *dfdp;
{
/* System generated locals */
integer i__1, i__2;
doublereal d__1, d__2;
/* Local variables */
extern /* Subroutine */ int fopt_();
static integer i, j;
static doublereal f1, f2, ep, umx;
/* ---------- ---- */
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Interface subroutine to user supplied FOPT. */
/* Generate the objective function. */
/* Parameter adjustments */
--dfdp;
--dfdu;
--par;
--icp;
--u;
/* Function Body */
fopt_(ndim, &u[1], &icp[1], &par[1], ijac, f, &dfdu[1], &dfdp[1]);
if (blmax_1.jac == 1 || *ijac == 0) {
return 0;
}
/* Generate the Jacobian by differencing. */
umx = blrcn_1.zero;
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
if ((d__1 = u[i], abs(d__1)) > umx) {
umx = (d__2 = u[i], abs(d__2));
}
/* SGLE IF( ABS(U(I)).GT.UMX)UMX= ABS(U(I)) */
/* L1: */
}
ep = blrcn_1.hmach * (blrcn_1.one + umx);
i__1 = *ndim;
for (i = 1; i <= i__1; ++i) {
i__2 = *ndim;
for (j = 1; j <= i__2; ++j) {
bldif_1.u1zz[j - 1] = u[j];
bldif_1.u2zz[j - 1] = u[j];
/* L2: */
}
bldif_1.u1zz[i - 1] -= ep;
bldif_1.u2zz[i - 1] += ep;
fopt_(ndim, bldif_1.u1zz, &icp[1], &par[1], &c__0, &f1, &dfdu[1], &
dfdp[1]);
fopt_(ndim, bldif_1.u2zz, &icp[1], &par[1], &c__0, &f2, &dfdu[1], &
dfdp[1]);
dfdu[i] = (f2 - f1) / (ep * 2);
/* L4: */
}
i__1 = blicn_1.nfpar;
for (i = 1; i <= i__1; ++i) {
ep = blrcn_1.hmach * (blrcn_1.one + (d__1 = par[icp[i]], abs(d__1)));
/* SGLE EP=HMACH*( ONE + ABS(PAR(ICP(I))) ) */
par[icp[i]] += ep;
fopt_(ndim, &u[1], &icp[1], &par[1], &c__0, &f1, &dfdu[1], &dfdp[1]);
dfdp[icp[i]] = (f1 - *f) / ep;
par[icp[i]] -= ep;
/* L6: */
}
return 0;
} /* fopi_ */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Installation Dependent Subroutines for Timing AUTO */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Subroutine */ int autim0_(t)
doublereal *t;
{
extern doublereal etime_();
static real timaray[2];
/* ---------- ------ */
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Set initial time for measuring CPU time used. */
*t = etime_(timaray);
return 0;
} /* autim0_ */
/* Subroutine */ int autim1_(t)
doublereal *t;
{
extern doublereal etime_();
static real timaray[2];
/* ---------- ------ */
/* SGLE IMPLICIT REAL (A-H,O-Z) */
/* Set final time for measuring CPU time used. */
*t = etime_(timaray);
return 0;
} /* autim1_ */
syntax highlighted by Code2HTML, v. 0.9.1