* * $Id: orthvc.F,v 1.1.1.1 1996/04/01 15:03:28 mclareni Exp $ * * $Log: orthvc.F,v $ * Revision 1.1.1.1 1996/04/01 15:03:28 mclareni * Mathlib gen * * #include "gen/pilot.h" SUBROUTINE ORTHVC (N,NFREE,IFREE,X,FX,XLOW,XHI,Y,FY,P,SPMAX,SNMAX) INTEGER N, NFREE INTEGER IFREE(NFREE) DOUBLE PRECISION FX, FY, SPMAX, SNMAX DOUBLE PRECISION X(N), XLOW(N), XHI(N), Y(N), P(N) INTEGER I, II, KTEST, NFRM1, NTEMP LOGICAL EVEN DOUBLE PRECISION STPNEG, STPPOS KTEST=2*(NFREE/2) EVEN=.FALSE. IF(KTEST.EQ.NFREE) EVEN=.TRUE. NTEMP=NFREE IF(.NOT.EVEN) NTEMP=NFREE-1 IF(NTEMP.GT.0) GOTO 10 IF(FY.GT.FX) P(1)=-P(1) II=IFREE(1) CALL MXSTEP(Y(II),XLOW(II),XHI(II),P(1),SPMAX,SNMAX) RETURN 10 SPMAX=1.0D+30 SNMAX=1.0D+30 DO 20 I=1,NTEMP,2 II=IFREE(I) CALL MXSTEP(Y(II),XLOW(II),XHI(II),P(I),STPPOS,STPNEG) IF(STPPOS.LT.SPMAX) SPMAX=STPPOS IF(STPNEG.LT.SNMAX) SNMAX=STPNEG II=IFREE(I+1) P(I+1)=-P(I+1) CALL MXSTEP(Y(II),XLOW(II),XHI(II),P(I+1),STPPOS,STPNEG) IF(STPPOS.LT.SPMAX) SPMAX=STPPOS IF(STPNEG.LT.SNMAX) SNMAX=STPNEG 20 CONTINUE IF(EVEN) RETURN NFRM1=NFREE-1 P(NFRM1)=P(NFRM1)/2.0D+0 P(NFREE)=-P(NFREE)/2.0D+0 II=IFREE(NFREE) CALL MXSTEP(Y(II),XLOW(II),XHI(II),P(NFREE),STPPOS,STPNEG) IF(STPPOS.LT.SPMAX) SPMAX=STPPOS IF(STPNEG.LT.SNMAX) SNMAX=STPNEG RETURN END