C OTTVAF    SOURCE    PV        22/04/15    13:20:12     11344          
      SUBROUTINE OTTVAF(X2,KV0,XVAL,VAR1,NV,VV1,VV2,VV3,
     &    VAR2,TOL,IERUT) 
* 
      IMPLICIT INTEGER (I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
      DIMENSION VAR1(*),VV1(*),VV2(*),VV3(*),VAR2(*),xval(*)
      PARAMETER (NAUX=20)
*
      X2=1.D0
      CALL OTTVAI(VV1,XVAL,VAR2,F,KV0,IERUT)
      IF(IERUT.NE.0) RETURN
      IF(F.LT.TOL) RETURN
      CALL OTTVAI(VAR1,XVAL,VAR2,F0,KV0,IERUT)
      IF(IERUT.NE.0) RETURN
*         
      F00 = F0
      X0=0.D0
      X1=1.D0
      F1 = F
      JT=0
33    CONTINUE
      JT=JT+1
      IF(JT.GT.NAUX) THEN
         GO TO 202
      ENDIF
      X2 = X1 - (X0-X1)*F1/(F0-F1)
      IF(X2.LT.0.D0.OR.X2.GT.1.D0) THEN
        IERUT=2
        RETURN
      ENDIF
      DO I=1,NV
        VV1(I)=VAR1(I)+X2*(1.-X2/2.)*VV2(I) + X2*X2*VV3(I)/2.D0
      ENDDO
      CALL OTTVAI(VV1,XVAL,VAR2,F2,KV0,IERUT)
      IF(IERUT.NE.0) RETURN
      IF(ABS(F2).LE.TOL) GO TO 100
      IF(F0*F2.LT.0.D0) THEN
        X1=X0
        F1=F0
      ELSE
        F1 = F1*F0/(F0+F2)
      ENDIF
      X0=X2
      F0=F2 
      GO TO 33
*
202   CONTINUE
      X0=0.D0
      X1=1.D0
      F0 = F00
      F1 = F
      JT=0
      KT=0
43    CONTINUE
      JT=JT+1
      IF(JT.GT.NAUX) THEN
         IERUT=2
         RETURN
      ENDIF
      X2 = X1 - (X0-X1)*F1/(F0-F1)
      IF(X2.LT.0.D0.OR.X2.GT.1.D0) THEN
        IERUT=2
        RETURN
      ENDIF
      DO I=1,NV
        VV1(I) = VAR1(I)+X2*(1.-X2/2.)*VV2(I) + X2*X2*VV3(I)/2.D0
      ENDDO
      CALL OTTVAI(VV1,XVAL,VAR2,F2,KV0,IERUT)
      IF(IERUT.NE.0) RETURN
      IF(ABS(F2).LE.TOL) GO TO 100
      IF(F1*F2.LT.0.D0) THEN
        AUX=X1
        AUF=F1
        X1=X0
        F1=F0
        X0=AUX
        F0=AUF
      ENDIF
*
235   CONTINUE
      KT=KT+1
      IF(KT.GT.NAUX) THEN
         IERUT=2
         RETURN
      ENDIF
      IF(F1*F2.GT.0.D0) THEN
        F0 = F0*F1/(F1+F2)
        X1=X2
        F1=F2
        X2 = X1 - (X0-X1)*F1/(F0-F1)
      IF(X2.LT.0.D0.OR.X2.GT.1.D0) THEN
        IERUT=2
        RETURN
      ENDIF
      DO I=1,NV
        VV1(I) = VAR1(I)+X2*(1.-X2/2.)*VV2(I) + X2*X2*VV3(I)/2.D0
      ENDDO
      CALL OTTVAI(VV1,XVAL,VAR2,F2,KV0,IERUT)
      IF(IERUT.NE.0) RETURN
        IF(ABS(F2).LE.TOL) GO TO 100
      ENDIF
      IF(F1*F2.LT.0.D0) THEN
        X0=X1
        F0=F1
        X1=X2
        F1=F2
        GO TO 43
      ELSE 
        GO TO 235
      ENDIF
100   CONTINUE
      RETURN
      END

 
 
