      SUBROUTINE DERPAR(N, X, XLOW, XUPP, EPS, W, INITAL, ITIN, HH,     DER   10
     * HMAX, PREF, NDIR, E, MXADMS, NCORR, NCRAD, NOUT, OUT,
     * MAXOUT, NPRNT)
      DIMENSION X(11), XLOW(11), XUPP(11), W(11), HMAX(11),
     * PREF(11), NDIR(11), OUT(100,12), F(11), G(10,11), BETA(11),
     * MARK(11), DXDT(11)
C OBTAINING OF DEPENDENCE OF SOLUTION X(ALFA) OF EQUATION
C F ( X , ALFA ) = 0
C ON PARAMETER ALFA BY MODIFIED METHOD OF DIFFERENTIATION
C WITH RESPECT TO PARAMETER
C N - NUMBER OF UNKNOWNS X(I)
C X(1),...,X(N) - INITIAL VALUES OF X(I), AFTER RETURN FINAL VALUES
C                 OF X(I)
C X(N+1) - INITIAL VALUE OF PARAMETER ALFA, AFTER RETURN FINAL VALUE
C          OF ALFA
C XLOW(1),...,XLOW(N) - LOWER BOUNDS FOR X(I)
C XUPP(1),...,XUPP(N) - UPPER BOUNDS FOR X(I)
C XLOW(N+1),XUPP(N+1) - LOWER AND UPPER BOUNDS FOR ALFA
C    IF XLOW OR XUPP IS EXCEEDED, THEN END OF DERPAR
C    AND MAXOUT=-2 AFTER RETURN
C EPS - ACCURACY DESIRED IN NEWTON ITERATION FOR
C    SUM OF (W(I)*ABS(XNEW(I)-XOLD(I))), I=1,...,N+1
C W(1),...,W(N+1) - WEIGHTS USED IN TERMINATION CRITERION OF NEWTON
C                   PROCESS
C INITAL - IF (INITAL.NE.0) THEN SEVERAL STEPS IN NEWTON ITERATION
C         ARE MADE BEFORE COMPUTATION IN ORDER TO INCREASE
C         ACCURACY OF INITIAL POINT-
C     IF (INITAL.EQ.1.AND.EPS-ACCURACY IS NOT FULFILLED IN ITIN
C     ITERATIONS) THEN RETURN.   IF (INITAL.EQ.2) THEN ALWAYS RETURN
C     AFTER INITIAL NEWTON ITERATION, RESULTS ARE IN X.
C     IF (INITAL.EQ.3) THEN CONTINUE IN DERPAR AFTER INITIAL NEWTON.
C     IF (INITAL.EQ.0) THEN NO INITIAL NEWTON ITERATION IS USED.
C ITIN - MAXIMAL NUMBER OF INITIAL NEWTON ITERATIONS. IF
C       EPS-ACCURACY IS NOT FULFILLED IN ITIN ITERATIONS THEN
C       ITIN=-1 AFTER RETURN.
C HH - INTEGRATION STEP ALONG ARC LENGTH OF SOLUTION LOCUS
C HMAX(1),...,HMAX(N+1) - UPPER BOUNDS FOR INCREMENTS OF X(I) IN
C                        ONE INTEGRATION STEP (APPROXIMATION ONLY)
C PREF(1),...,PREF(N+1) - PREFERENCE NUMBERS (EXPLANATION SEE IN
C                         SUBR.GAUSE)
C NDIR(1),...,NDIR(N+1) - INITIAL CHANGE OF X(I) IS POSITIVE ALONG
C     SOLUTION LOCUS (CURVE) IF NDIR(I)=1 AND NEGATIVE IF
C     NDIR(I)=-1.
C E - CRITERION FOR TEST ON CLOSED CURVE, IF
C    (SUM OF (W(I)*ABS(X(I)-XINITIAL(I))),I=1,...,N+1).LE.E)
C    THEN CLOSED CURVE MAY BE EXPECTED.
C MXADMS - MAXIMAL ORDER OF ADAMS-BASHFORTH FORMULA,
C          1.LE.MXADMS.LE.4.
C NCORR - MAXIMAL NUMBER OF NEWTON CORRECTIONS AFTER PREDICTION
C    BY ADAMS-BASHFORTH METHOD.
C NCRAD - IF (NCRAD.NE.0) THEN ADDITIONAL NEWTON CORRECTION
C    WITHOUT NEW COMPUTATION OF JACOBIAN MATRIX IS USED.
C NOUT - AFTER RETURN NUMBER OF CALCULATED POINTS ON THE CURVE
C        X(ALFA), NOUT.LE.MAXOUT.
C OUT(J,1),OUT(J,2),...,OUT(J,N+1) - J-TH POINT X(1),...,X(N),ALFA
C    ON CURVE X(ALFA)
C OUT(J,N+2) - VALUE OF SQRT(SUM OF SQUARES OF F).
C    IF (OUT(J,N+2).LT.0.0) THEN  ABS(OUT(J,N+2)) CORRESPONDS TO X
C    AND ALFA NOT EXACTLY, BECAUSE ADDITIONAL NEWTON CORRECTION WAS
C    USED (NCRAD.NE.0).
C    VALUES F(I) ARE NOT COMPUTED FOR X AND ALFA PRINTED AND/OR
C    STORED AND THEREFORE LAST TIME COMPUTED VALUE OF SQRT(SUM OF
C    SQUARES OF F) IS ON OUR DISPOSAL ONLY.
C MAXOUT - MAXIMAL NUMBER OF CALCULATED POINTS ON CURVE X(ALFA).
C    IF MAXOUT AFTER RETURN EQUALS TO-
C          -1 - THEN CLOSED CURVE X(ALFA) MAY BE EXPECTED
C          -2 - THEN BOUND XLOW OR XUPP WAS EXCEEDED
C          -3 - THEN SINGULAR JACOBIAN MATRIX OCCURRED, ITS RANK IS
C               .LT. N.
C NPRNT - IF (NPRNT.EQ.3) THEN RESULTING POINTS ON CURVE X(ALFA)
C    ARE IN ARRAY OUT( , ) AFTER RETURN. IF (NPRNT.EQ.1) THEN THESE
C    POINTS ARE PRINTED ONLY.  IF (NPRNT.EQ.2) THEN THESE POINTS ARE
C    BOTH PRINTED AND IN ARRAY OUT.
C SUBROUTINE FCTN MUST BE PROGRAMMED IN FOLLOWING FORM -
C   SUBROUTINE FCTN(N,X,F,G)
C   DIMENSION X(11),F(10),G(10,11)
C   F(I)= FI (X(1),X(2),...,X(N),ALFA) FOR I=1,...,N
C   G(I,J)= D FI (X(1),...,X(N),ALFA)/ D X(J) FOR  I,J=1,...,N
C   G(I,N+1)= D FI (X(1),...,X(N),ALFA)/ D ALFA  FOR I=1,...,N
C   RETURN
C   END
      DATA INDIC, INDSP /1H*,1H /
C LW IS PRINTER DEVICE NUMBER
      N1 = N + 1
      LW = 3
      IF (INITAL) 10, 60, 10
C INITIAL NEWTON ITERATIONS
   10 DO 40 L=1,ITIN
        CALL FCTN(N, X, F, G)
        SQUAR = 0.0
        DO 20 I=1,N
          SQUAR = SQUAR + F(I)**2
   20   CONTINUE
        LL = L - 1
        SQUAR = SQRT(SQUAR)
        IF (NPRNT.NE.3) WRITE (LW,99999) LL, (X(I),I=1,N1), SQUAR
        CALL GAUSE(N, G, F, M, 10, 11, PREF, BETA, K)
        IF (M.EQ.0) GO TO 310
        P = 0.0
        DO 30 J=1,N1
          X(J) = X(J) - F(J)
          P = P + ABS(F(J))*W(J)
   30   CONTINUE
        IF (P.LE.EPS) GO TO 50
   40 CONTINUE
      WRITE (LW,99998) ITIN
      ITIN = -1
      IF (INITAL.EQ.1) RETURN
   50 IF (NPRNT.NE.3) WRITE (LW,99997) (X(I),I=1,N1)
      IF (INITAL.EQ.2) RETURN
C AFTER INITIAL NEWTON ITERATIONS
   60 IF (NPRNT.NE.3) WRITE (LW,99996)
      KOUT = 0
      NOUT = 0
      MADMS = 0
      NC = 1
      K1 = 0
   70 CALL FCTN(N, X, F, G)
      SQUAR = 0.0
      DO 80 I=1,N
        SQUAR = SQUAR + F(I)**2
   80 CONTINUE
      CALL GAUSE(N, G, F, M, 10, 11, PREF, BETA, K)
      IF (M.EQ.0) GO TO 310
      IF (K1.EQ.K) GO TO 90
C CHANGE OF INDEPENDENT VARIABLE (ITS INDEX = K NOW)
      MADMS = 0
      K1 = K
   90 SQUAR = SQRT(SQUAR)
      IF (NCRAD.EQ.1) SQUAR = -SQUAR
      P = 0.0
      DO 100 I=1,N1
        P = P + W(I)*ABS(F(I))
  100 CONTINUE
      IF (P.LE.EPS) GO TO 130
      IF (NC.GE.NCORR) GO TO 120
      DO 110 I=1,N1
        X(I) = X(I) - F(I)
  110 CONTINUE
C ONE ITERATION IN NEWTON METHOD
      NC = NC + 1
      GO TO 70
  120 IF (NCORR.EQ.0) GO TO 130
      WRITE (LW,99995) NCORR, P
  130 NC = 1
      IF (NCRAD.EQ.0) GO TO 150
C ADDITIONAL NEWTON CORRECTION
      DO 140 I=1,N1
        X(I) = X(I) - F(I)
  140 CONTINUE
  150 NOUT = NOUT + 1
      DO 160 I=1,N1
        MARK(I) = INDSP
  160 CONTINUE
      MARK(K) = INDIC
      IF (NPRNT.EQ.3) GO TO 170
      WRITE (LW,99994)
      WRITE (LW,99993) (X(I),MARK(I),I=1,N1), SQUAR
  170 IF (NPRNT.EQ.1) GO TO 200
      IF (NOUT.LE.100) GO TO 180
      WRITE (LW,99992)
      RETURN
  180 DO 190 I=1,N1
        OUT(NOUT,I) = X(I)
  190 CONTINUE
      OUT(NOUT,N+2) = SQUAR
      GO TO 210
  200 IF (NOUT.EQ.1) GO TO 180
  210 IF (NOUT.GE.MAXOUT) RETURN
      DO 220 I=1,N1
        IF (X(I).LT.XLOW(I) .OR. X(I).GT.XUPP(I)) GO TO 300
  220 CONTINUE
      IF (NOUT.LE.3) GO TO 240
      P = 0.0
      DO 230 I=1,N1
        P = P + W(I)*ABS(X(I)-OUT(1,I))
  230 CONTINUE
      IF (P.LE.E) GO TO 290
C CLOSED CURVE MAY BE EXPECTED
  240 DXK2 = 1.0
      DO 250 I=1,N1
        DXK2 = DXK2 + BETA(I)**2
  250 CONTINUE
      DXDT(K) = 1.0/SQRT(DXK2)*FLOAT(NDIR(K))
C DERIVATIVE OF INDEPENDENT VARIABLE X(K) WITH RESPECT TO ARC LENGTH
C OF SOLUTION LOCUS IS COMPUTED HERE
      H = HH
      DO 270 I=1,N1
        NDIR(I) = 1
        IF (I.EQ.K) GO TO 260
        DXDT(I) = BETA(I)*DXDT(K)
  260   IF (DXDT(I).LT.0.0) NDIR(I) = -1
        IF (H*ABS(DXDT(I)).LE.HMAX(I)) GO TO 270
        MADMS = 0
        H = HMAX(I)/ABS(DXDT(I))
  270 CONTINUE
      IF (NOUT.LE.KOUT+3) GO TO 280
      IF (H*ABS(DXDT(K)).LE.0.8*ABS(X(K)-OUT(1,K))) GO TO 280
      IF ((OUT(1,K)-X(K))*FLOAT(NDIR(K)).LE.0.0) GO TO 280
      MADMS = 0
      IF (H*ABS(DXDT(K)).LE.ABS(X(K)-OUT(1,K))) GO TO 280
      H = ABS(X(K)-OUT(1,K))/ABS(DXDT(K))
      KOUT = NOUT
  280 CALL ADAMS(N, DXDT, MADMS, H, X, MXADMS)
      GO TO 70
  290 WRITE (LW,99991)
      MAXOUT = -1
      RETURN
  300 MAXOUT = -2
      RETURN
  310 WRITE (LW,99990) (X(I),I=1,N1)
      MAXOUT = -3
      RETURN
99999 FORMAT (3X, 7H DERPAR, I3, 25H.INITIAL NEWTON ITERATION/22X,
     * 11HX,ALFA,SQF=, 5F15.7/(33X, 5F15.7))
99998 FORMAT (/16H DERPAR OVERFLOW, I5, 2X, 18HINITIAL ITERATIONS/)
99997 FORMAT (3X, 39H DERPAR AFTER INITIAL NEWTON ITERATIONS/22X,
     * 7HX,ALFA=, 4X, 5F15.7/(33X, 5F15.7))
99996 FORMAT (/6X, 45H DERPAR RESULTS (VARIABLE CHOSEN AS INDEPENDE,
     * 18HNT IS MARKED BY *)/)
99995 FORMAT (/37H DERPAR NUMBER OF NEWTON CORRECTIONS=, I5,
     * 31H  IS NOT SUFFICIENT,ERROR OF X=, F15.7/)
99994 FORMAT (6X, 27H DERPAR RESULTS X,ALFA,SQF=)
99993 FORMAT (33X, 5(F15.7, A1))
99992 FORMAT (/28H DERPAR OUTPUT ARRAY IS FULL//)
99991 FORMAT (/36H DERPAR CLOSED CURVE MAY BE EXPECTED/)
99990 FORMAT (/48H DERPAR SINGULAR JACOBIAN MATRIX FOR X AND ALFA=,
     * 5F12.6/(48X, 5F12.6))
      END
      SUBROUTINE ADAMS(N, D, MADMS, H, X, MXADMS)                       ADA   10
      DIMENSION DER(4,11), X(11), D(11)
C ADAMS-BASHFORTH METHODS
      N1 = N + 1
      DO 20 I=1,3
        DO 10 J=1,N1
          DER(I+1,J) = DER(I,J)
   10   CONTINUE
   20 CONTINUE
      MADMS = MADMS + 1
      IF (MADMS.GT.MXADMS) MADMS = MXADMS
      IF (MADMS.GT.4) MADMS = 4
      DO 70 I=1,N1
        DER(1,I) = D(I)
        GO TO (30, 40, 50, 60), MADMS
   30   X(I) = X(I) + H*DER(1,I)
        GO TO 70
   40   X(I) = X(I) + 0.5*H*(3.0*DER(1,I)-DER(2,I))
        GO TO 70
   50   X(I) = X(I) + H*(23.0*DER(1,I)-16.0*DER(2,I)+5.0*DER(3,I))/
     *   12.0
        GO TO 70
   60   X(I) = X(I) + H*(55.0*DER(1,I)-59.0*DER(2,I)+37.0*DER(3,I)
     *   -9.0*DER(4,I))/24.0
   70 CONTINUE
      RETURN
      END
      SUBROUTINE GAUSE(N, A, B, M, NN, MM, PREF, BETA, K)               GAU   10
      DIMENSION A(NN,MM), B(MM), PREF(MM), BETA(MM), Y(11), X(11),
     * IRR(11), IRK(11)
C SOLUTION OF N LINEAR EQUATIONS FOR N+1 UNKNOWNS
C BASED ON GAUSSIAN ELIMINATION WITH PIVOTING.
C N - NUMBER OF EQUATIONS
C A - N X (N+1) MATRIX OF SYSTEM
C B - RIGHT-HAND SIDES
C M - IF (M.EQ.0) AFTER RETURN THEN RANK(A).LT.N
C PREF(I) - PREFERENCE NUMBER FOR X(I) TO BE INDEPENDENT VARIABLE,
C 0.0.LE.PREF(I).LE.1.0, THE LOWER IS PREF(I) THE HIGHER IS
C PREFERENCE OF X(I).
C BETA(I) - COEFFICIENTS IN EXPLICIT DEPENDENCES OBTAINED IN FORM -
C          X(I)=B(I)+BETA(I)*X(K), I.NE.K.
C K - RESULTING INDEX OF INDEPENDENT VARIABLE
      N1 = N + 1
      ID = 1
      M = 1
      DO 10 I=1,N1
        IRK(I) = 0
        IRR(I) = 0
   10 CONTINUE
   20 IR = 1
      IS = 1
      AMAX = 0.0
      DO 60 I=1,N
        IF (IRR(I)) 60, 30, 60
   30   DO 50 J=1,N1
          P = PREF(J)*ABS(A(I,J))
          IF (P-AMAX) 50, 50, 40
   40     IR = I
          IS = J
          AMAX = P
   50   CONTINUE
   60 CONTINUE
      IF (AMAX.NE.0.0) GO TO 70
C THIS CONDITION FOR SINGULARITY OF MATRIX MUST BE SPECIFIED
C MORE EXACTLY WITH RESPECT TO COMPUTER ACTUALLY USED
      M = 0
      GO TO 150
   70 IRR(IR) = IS
      DO 90 I=1,N
        IF (I.EQ.IR .OR. A(I,IS).EQ.0.0) GO TO 90
        P = A(I,IS)/A(IR,IS)
        DO 80 J=1,N1
          A(I,J) = A(I,J) - P*A(IR,J)
   80   CONTINUE
        A(I,IS) = 0.0
        B(I) = B(I) - P*B(IR)
   90 CONTINUE
      ID = ID + 1
      IF (ID.LE.N) GO TO 20
      DO 100 I=1,N
        IR = IRR(I)
        X(IR) = B(I)/A(I,IR)
        IRK(IR) = 1
  100 CONTINUE
      DO 110 K=1,N1
        IF (IRK(K).EQ.0) GO TO 120
  110 CONTINUE
  120 DO 130 I=1,N
        IR = IRR(I)
        Y(IR) = -A(I,K)/A(I,IR)
  130 CONTINUE
      DO 140 I=1,N1
        B(I) = X(I)
        BETA(I) = Y(I)
  140 CONTINUE
      B(K) = 0.0
      BETA(K) = 0.0
  150 RETURN
      END
