V10/cmd/lcc/port.bak/dodes.c
/* dodes.f -- translated by f2c (version of 5 February 1993 1:37:14).
You must link the resulting object file with the libraries:
-lF77 -lI77 -lm -lc (in that order)
*/
#include "f2c.h"
/* Common Block Declarations */
extern struct {
logical okay;
} dodesf_;
#define dodesf_1 dodesf_
/* Table of constant values */
static integer c__0 = 0;
/* Subroutine */ int dodes_(f, x, nx, tstart, tstop, dt, errpar, handle)
/* Subroutine */ int (*f) ();
doublereal *x;
integer *nx;
doublereal *tstart, *tstop, *dt;
real *errpar;
/* Subroutine */ int (*handle) ();
{
extern /* Subroutine */ int dodes1_();
extern /* Subroutine */ int dodese_();
/* TO SOLVE THE INITIAL VALUE PROBLEM FOR */
/* DX(T)/DT = F(T,X(T)). */
/* METHOD - RATIONAL EXTRAPOLATION OF GRAGGS MODIFIED MID-POINT RULE. */
/* INPUT */
/* F - CALL F(T,X,NX,FTX) SHOULD RETURN FTX(I)=F(T,X)(I), */
/* FOR I=1,...,NX. IF IT CANNOT, IT SHOULD RETURN */
/* OKAY=.FALSE. IN COMMON /DODESF/OKAY . */
/* F SHOULD BE DECLARED EXTERNAL IN THE SUBPROGRAM */
/* CALLING DODES. */
/* X - THE INITIAL VALUES FOR THE SOLUTION. */
/* NX - THE LENGTH OF THE SOLUTION VECTOR X. */
/* TSTART - THE INITIAL TIME. */
/* TSTOP - THE FINAL TIME. */
/* DT - THE INITIAL TIME-STEP TO BE USED. */
/* THE PERFORMANCE OF DODES IS SUBSTANTIALLY */
/* INDEPENDENT OF THE VALUE OF DT CHOSEN BY THE USER. */
/* IT IS SUFFICIENT THAT THE USERS CHOICE FOR DT MERELY BE */
/* WITHIN SEVERAL ORDERS OF MAGNITUDE OF BEING CORRECT. */
/* THE VALUE OF DT WILL BE AUTOMATICALLY CHANGED BY DODES */
/* DURING THE INTEGRATION PROCESS IN SUCH A WAY AS TO GET */
/* THE SOLUTION, TO THE DESIRED ACCURACY, AT THE LEAST */
/* POSSIBLE COST. */
/* ERRPAR - EACH COMPONENT X(I) OF THE SOLUTION IS TO BE COMPUTED */
/* TO WITHIN AN ABSOLUTE ERROR OF */
/* ERRPAR(1) * ABS(X(I)) + ERRPAR(2) */
/* FOR I=1,...,NX, AT EACH TIME-STEP. THIS ERROR REQUEST MUST
*/
/* ALWAYS BE POSITIVE. */
/* HANDLE - OUTPUT ROUTINE WITH A CALLING SEQUENCE OF THE FORM */
/* HANDLE(T0,X0,T1,X1,NX,DT,TSTOP,E) */
/* HANDLE WILL BE CALLED AT THE END OF EACH TIME-STEP. */
/* THE INPUT TO HANDLE IS AS FOLLOWS */
/* X0,X1 - X0=X(T0) AND X1=X(T1). */
/* T0,T1 - T0=T1 INDICATES A RESTART AND X1 IS FULL OF */
/* GARBAGE. */
/* NX - THE LENGTH OF THE SOLUTION VECTOR X. */
/* DT - THE PROPOSED TIME-STEP FOR THE NEXT STEP. */
/* TSTOP - THE CURRENT FINAL TIME. */
/* E - E(I) GIVES THE REAL ABSOLUTE ERROR IN X1(I), */
/* I=1,...,NX, FOR THE SINGLE CURRENT TIME-STEP. */
/* THE OUTPUT FROM HANDLE MAY BE ANY OF */
/* X1 - MAY BE ALTERED IF DESIRED. */
/* DT - THE PROPOSED TIME-STEP FOR THE NEXT STEP. */
/* TSTOP - THE FINAL TIME VALUE. */
/* HANDLE SHOULD BE DECLARED EXTERNAL IN THE */
/* SUBPROGRAM CALLING DODES. */
/* OUTPUT */
/* X - X=X(TSTOP), THE FINAL VALUE FOR THE SOLUTION. */
/* TSTOP - MAY BE ALTERED BY USER SUPPLIED ROUTINE HANDLE. */
/* DT - PROPOSED TIME-STEP FOR THE NEXT STEP, IF ANY. */
/* SCRATCH SPACE OF LENGTH */
/* S(DODES) .LE. */
/* 32 + 12*NX */
/* DOUBLE PRECISION WORDS + */
/* 101 + MAX( 2*NX DOUBLE PRECISION + S(F) , */
/* 11*NX + 10 DOUBLE PRECISION + 10 , */
/* NX + S(HANDLE) ) */
/* INTEGER WORDS IS ALLOCATED. */
/* ERROR STATES */
/* 1 - NX.LT.1. */
/* 2 - DT HAS THE WRONG SIGN ON INPUT. */
/* 3 - DT=0 ON INPUT. */
/* 4 - DT RETURNED BY HANDLE HAS THE WRONG SIGN. */
/* 5 - DT=0 WAS RETURNED BY HANDLE. (RECOVERABLE) */
/* 6 - THE ERROR DESIRED IN X(I) IS NOT POSITIVE. (RECOVERABLE) */
/* 7 - DT=0. (RECOVERABLE) */
/* 8 - CANNOT RAISE DT IN HANDLE WHEN .NOT.OKAY. */
/* Parameter adjustments */
--errpar;
--x;
/* Function Body */
if (*tstart == *tstop) {
goto L10;
}
dodes1_(f, &x[1], nx, tstart, tstop, dt, dodese_, &errpar[1], handle, &
c__0, &c__0);
L10:
return 0;
} /* dodes_ */