      SUBROUTINE DEFTOL ( ARINPT, SW, CLTOA, CLAPP, ITAKOF, ILAND, TRR ) 
  
C  INPUT DATA FOR THE TAKEOFF AND LANDING MODULE
C  FORMAL PARAMETERS ARE USED FOR DEFAULT VALUES
C     ARINPT  REFERENCE ASPECT RATIO
C     SW      REFERENCE WING AREA 
C     CLTOA   MAXIMUM TAKEOFF LIFT COEFFICIENT
C     CLAPP   MAXIMUM APPROACH LIFT COEFFICIENT 
C     ITAKOF  DETAILED TAKEOFF SWITCH 
C     ILAND   DETAILED LANDING SWITCH 
C     TRR     REFERENCE THRUST FOR SCALING INPUT DATA
 
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c     ohad 15/7/08
c      IMPLICIT INTEGER*8 (I-N)
      IMPLICIT INTEGER*4 (I-N)
 
      COMMON /UNITS / IU5, IU6, IU7, IU8, IU9, IU16, IU17, IU18
      COMMON /BALFLD/ ALPRUN, ARGEF, BRAKMU, CDGRO, CDSPOL, CLSPOL,
     1                RHOA, ROLLMU, TIBRA, TICUT, TINC, TISPA, VANGL,
     2                WHGT, PILOTT, CDEOT, ITIME, ISPOL, IREV
      COMMON / LAND / ALMXLD,APRANG,CLLDM ,TISPOL,TIBRAK,CDMW  ,DMO   , 
     1                ACCLIM,DELTRN,OBSLD ,DELHAP,DELDFL,CDMLD ,APRHGT, 
     2                SWING, AR, THDRY, CLLD(10), CDLD(10), ALPLD(10),
     3                MAGRUP
      COMMON /TOLTH / APA, ANS1, DTCT, SPDSND, THFACT, THREF, THRTO(10),
     1                THRLD(10), VELTO(10), VELLD(10), INTHTO, INTHLD
      COMMON /TREVRS/ RVFACT, TIRVRS, TIRVA, REVCTF, CLREV, CDREV,
     1                VELRV(10), THRRV(10), INTHRV
      COMMON /TOCOMM/ CDMT  ,DMT   ,ALPROT,DELTCL,SWREF ,ARRET ,VROTAT, 
     1                OBSTO ,DELTRO,DELVTO,ALMXTO,TIGEAR,CLTOM ,CDMTO , 
     2                CDDP(10), CLDPOC(10), ALPTO(10), CLTO(10),
     3                CDTO(10), IBAL
      COMMON /NOISEP/ NOPRO, NPFILE, NOISE
      COMMON / FORT / IFITE
      COMMON /GEFSW / INCGEF
      COMMON /TAXFUL/ TAXOFL, ITXOUT
  
      DATA            CDGEAR, CDEOUT /2*0./, FCDMTO /.3/, FCDMLD /-1./,
     1                FTOCD, FLDCD /2*1./, REVCUT /-1000./
  
      NAMELIST/TOLIN/ WHGT, SWREF, ARRET, APA, ALPRUN, TINC, CDGEAR,
     1                ITIME, TIGEAR, CLSPOL, CDSPOL, BRAKMU, ROLLMU,
     2                CLTOM, ALMXTO, CDMTO, FCDMTO, ALPTO, CLTO, CDTO,
     3                INTHTO, VELTO, THRTO, VROTAT, ALPROT, THFACT,
     4                CDDP, CLDPOC, TISPA, TIBRA, TICUT, OBSTO, IBAL,
     5                DELTRO, DELVTO, CLLDM, ALMXLD, CDMLD, FCDMLD,
     6                ALPLD, CLLD, CDLD, VELLD, THRLD, INTHLD, OBSLD,
     7                TISPOL, TIBRAK, APRANG, ACCLIM, DELHAP, DELDFL,
     8                DELTRN, APRHGT, VANGL, DELTCL, DTCT, INTHRV,
     9                VELRV, THRRV, RVFACT, TIRVRS, TIRVA, ARGEF,
     *                PILOTT, ISPOL, IREV, NOPRO, NOISE, CDEOUT, THDRY,
     1                INCGEF, FTOCD, FLDCD, MAGRUP, ITXOUT, REVCUT,
     2                CLREV, CDREV
  
      ARRET  = ARINPT
      SWREF  = SW
      THREF  = TRR
      CLTOM  = CLTOA 
      CLLDM  = CLAPP 
      OBSTO  = 35. + 15.*IFITE
      MAGRUP = IFITE
  
C     READ NAMELIST TOLIN 
  
      READ ( IU5, NML=TOLIN, ERR=9000, END=9000 ) 
  
      SWING = SWREF 
      AR    = ARRET 
      CDMT  = FCDMTO * CDMTO
      DMT   = (1.0 - FCDMTO) * CDMTO * SWREF
      DO 10 I = 1,10
         THRTO(I) = THRTO(I) * THFACT 
         CDTO (I) = CDTO (I) * FTOCD
         CDLD (I) = CDLD (I) * FLDCD
   10 CONTINUE
      IF ( THRTO(1) .LE. 0.0 .AND. INTHTO .LT. 2 ) INTHTO = 2 
      IF ( FCDMLD  .LT. 0.0 ) FCDMLD = FCDMTO
      CDMW  = FCDMLD * CDMLD 
      DMO   = (1.0 - FCDMLD) * CDMLD * SWREF 
      CDGRO = CDGEAR * SWREF
      CDEOT = CDEOUT * SWREF
      IF ( APRHGT .LE. 100.0 ) APRHGT = 100.001
      IF ( APRANG .GT.   0.0 ) APRANG = -APRANG
      IF ( NOISE .EQ. 1 ) NOPRO = 1
  
C     PRINT INPUT DATA
  
      WRITE(IU6, 20) APA, DTCT, SWREF, ARRET, WHGT, ALPRUN, TINC,
     1               ROLLMU, BRAKMU, VANGL, CDGEAR, CDEOUT, CLSPOL,
     2               CDSPOL, INCGEF, ARGEF, ITIME
  
      IF ( ITAKOF .EQ. 0 ) GO TO 60 
      WRITE(IU6, 40) CLTOM, CDMTO, FCDMTO, ALMXTO, OBSTO, ALPROT,
     1               VROTAT, THFACT, FTOCD, TIGEAR, PILOTT, DELVTO,
     2               DELTRO, DELTCL, IBAL, ISPOL, IREV, INTHTO, ITXOUT 
      WRITE(IU6, 50) (ALPTO(I), I = 1,10), (CLTO(I), I = 1,10), 
     1               (CDTO(I), I = 1,10), (VELTO(I), I = 1,10),
     2               (THRTO(I), I = 1,10), (CLDPOC(I),I = 1,10),
     3               (CDDP(I),  I = 1,10) 
  
      IF ( ILAND .EQ. 0 ) GO TO 90
   60 WRITE(IU6, 70) CLLDM, CDMLD, FCDMLD, ALMXLD, OBSLD, APRHGT, 
     1               APRANG, FLDCD, TISPOL, TICUT, TIBRAK, ACCLIM,
     2               MAGRUP, DELHAP, DELDFL, DELTRN, INTHLD 
      IF ( IFITE .EQ. 1 .AND. THDRY .GT. 0. ) WRITE(IU6, 75) THDRY
      WRITE(IU6, 80) (ALPLD(I), I = 1,10), (CLLD(I), I = 1,10), 
     1               (CDLD(I), I = 1,10), (VELLD(I), I = 1,10), 
     2               (THRLD(I), I = 1,10)
  
   90 IF ( RVFACT .EQ. 0. ) GO TO 110
      WRITE(IU6,100) RVFACT, TIRVRS, REVCUT, CLREV, CDREV, INTHRV,
     1               (VELRV(I), I = 1,10), (THRRV(I), I = 1,10) 
      REVCTF = REVCUT*1852./.3048/3600.
  110 IF ( NOPRO .EQ. 1 ) WRITE(IU6, 30)
      IF ( NOISE .EQ. 1 ) WRITE(IU6, 31)
      RETURN
  
   20 FORMAT (///'# NAMELIST $TOLIN',/
     1  '  DETAILED TAKEOFF AND LANDING INPUT DATA',// 
     2  '   DESCRIPTION',16X,'NAME',9X,'VALUE  DIMENSIONS',// 
     3  '   AIRPORT ALTITUDE           APA    ',F11.0,'  FT',/
     4  '   DELTA TEMPERATURE          DTCT   ',F11.1,'  DEG C',/ 
     5  '   REFERENCE WING AREA        SWREF  ',F11.1,'  SQ FT',/ 
     6  '   REFERENCE ASPECT RATIO     ARRET  ',F11.4,/ 
     7  '   WING HEIGHT ABOVE GROUND   WHGT   ',F11.2,'  FT',/
     8  '   ANGLE OF ATTACK ON GROUND  ALPRUN ',F11.2,'  DEG',/ 
     9  '   THRUST INCIDENCE ON GRND   TINC   ',F11.2,'  DEG',/ 
     *  '   COEF. OF ROLLING FRICTION  ROLLMU ',F11.4,/ 
     1  '   COEF. OF FRICTION W/BRAKES BRAKMU ',F11.4,/ 
     2  '   ROTATION OR FLARE RATE     VANGL  ',F11.4,'  DEG/SEC',/ 
     3  '   LANDING GEAR DRAG COEF.    CDGEAR ',F11.6,/ 
     4  '   ENGINE OUT DELTA CD        CDEOUT ',F11.6,/ 
     5  '   SPOILER LIFT COEFFICIENT   CLSPOL ',F11.6,/ 
     6  '   SPOILER DRAG COEFFICIENT   CDSPOL ',F11.6,/ 
     7  '   GROUND EFFECTS SWITCH      INCGEF ',I11,/
     8  '   AR FACTOR FOR GRND EFF.    ARGEF  ',F11.5,/ 
     9  '   PROFILE PRINT SWITCH       ITIME  ',I11)

   30 FORMAT (/' A DETAILED TAKEOFF PROFILE FOR NOISE CALCULATIONS WILL'
     1 ,' BE GENERATED')
   31 FORMAT (/' NOISE CALCULATIONS WILL BE PERFORMED')
  
   40 FORMAT (/' INPUT DATA FOR TAKEOFF',/ 
     1  '   MAXIMUM LIFT COEFFICIENT   CLTOM  ',F11.6,/ 
     2  '   MINIMUM DRAG COEFFICIENT   CDMTO  ',F11.6,/ 
     3  '   WING FRACTION OF CDMTO     FCDMTO ',F11.5,/ 
     4  '   MAXIMUM ANGLE OF ATTACK    ALMXTO ',F11.2,'  DEG',/ 
     5  '   OBSTACLE HEIGHT            OBSTO  ',F11.2,'  FT',/
     6  '   MAX ALPHA DURING ROTATION  ALPROT ',F11.2,'  DEG',/ 
     7  '   ROTATION VELOCITY',10X,'VROTAT ',F11.3,'  KTS OR % VSTALL',/
     8  '   THRUST MULTIPLIER          THFACT ',F11.5,/ 
     9  '   TAKEOFF DRAG FACTOR        FTOCD  ',F11.4,/ 
     *  '   TIME REQ. TO RAISE GEAR    TIGEAR ',F11.2,'  SEC',/ 
     1  '   PILOT REACTION TIME        PILOTT ',F11.2,'  SEC',/
     2  '   GROUND RUN VELOCITY STEP   DELVTO ',F11.2,'  FT/SEC',/
     3  '   ROTATION TIME STEP         DELTRO ',F11.3,'  SEC',/ 
     4  '   CLIMBOUT TIME STEP         DELTCL ',F11.3,'  SEC',/ 
     5  '   BALANCED FIELD LENGTH ?    IBAL   ',I11,/ 
     6  '   SPOILERS DURING ABORT ?    ISPOL  ',I11,/
     7  '   ABORT THRUST REV. OPTION   IREV   ',I11,/
     8  '   THRUST INPUT OPTION        INTHTO ',I11,/
     9  '   TAXI OUT FUEL SWITCH       ITXOUT ',I11)
  
   50 FORMAT (/' TAKEOFF DRAG POLAR - GEAR DRAG NOT INCLUDED',// 
     1  '   ANGLE OF ATTACK    ALPTO ',10F10.2,/
     2  '   LIFT COEFFICIENT   CLTO  ',10F10.6,/
     3  '   DRAG COEFFICIENT   CDTO  ',10F10.6,//
     4  ' INPUT NET THRUST VALUES PER ENGINE DURING TAKEOFF',/
     5  '   VELOCITY, FT/SEC   VELTO ',10F10.1,/
     6  '   THRUST, LB         THRTO ',10F10.1,//
     7  ' VELOCITY DEPENDENT LIFT AND DRAG DURING TAKEOFF',/
     8  '   LIFT COEFFICIENT   CLDPOC',10F10.6,/
     9  '   DRAG COEFFICIENT   CDDP  ',10F10.6) 
  
   70 FORMAT (/' INPUT DATA FOR LANDING',/ 
     1  '   MAXIMUM LIFT COEFFICIENT   CLLDM  ',F11.6,/ 
     2  '   MINIMUM DRAG COEFFICIENT   CDMLD  ',F11.6,/ 
     3  '   WING FRACTION OF CDMLD     FCDMLD ',F11.5,/ 
     4  '   MAXIMUM ANGLE OF ATTACK    ALMXLD ',F11.2,'  DEG',/ 
     5  '   OBSTACLE HEIGHT            OBSLD  ',F11.2,'  FT',/
     6  '   START APPROACH HEIGHT      APRHGT ',F11.2,'  FT',/
     7  '   APPROACH FLIGHT PATH ANGLE APRANG ',F11.2,'  DEG',/ 
     8  '   LANDING DRAG FACTOR        FLDCD  ',F11.4,/ 
     9  '   TIME TO SPOILER ACTUATION  TISPOL ',F11.2,'  SEC',/ 
     *  '   TIME TO ENGINE CUTBACK     TICUT  ',F11.2,'  SEC',/ 
     1  '   TIME TO BRAKE APPLICATION  TIBRAK ',F11.2,'  SEC',/ 
     2  '   DECELERATION LIMIT         ACCLIM ',F11.2,'  FT/SEC2',/ 
     3  '   MISSED APPROACH GEAR UP    MAGRUP ',I11,/
     4  '   APPROACH ALTITUDE STEP     DELHAP ',F11.2,'  FT',/
     5  '   FLARE DISTANCE STEP        DELDFL ',F11.2,'  FT',/
     6  '   RUNOUT TIME STEP           DELTRN ',F11.2,'  SEC',/ 
     7  '   THRUST INPUT OPTION        INTHLD ',I11)

   75 FORMAT ( '   MAXIMUM DRY THRUST         THDRY  ',F10.1,'  LB')
  
   80 FORMAT (/' LANDING DRAG POLAR - GEAR DRAG NOT INCLUDED',// 
     1  '   ANGLE OF ATTACK    ALPLD ',10F10.2,/
     2  '   LIFT COEFFICIENT   CLLD  ',10F10.6,/
     3  '   DRAG COEFFICIENT   CDLD  ',10F10.6,//
     4  ' INPUT NET THRUST VALUES PER ENGINE DURING LANDING',/
     5  '   VELOCITY, FT/SEC   VELLD ',10F10.1,/
     6  '   THRUST, LB         THRLD ',10F10.1) 
  
  100 FORMAT(/' INPUT DATA FOR THRUST REVERSAL',// 
     1  '   THRUST REVERSAL FRACTION   RVFACT ',F11.5,/ 
     2  '   TIME AFTER TOUCHDOWN       TIRVRS ',F11.2,'  SEC',/ 
     3  '   REVERSER CUTOFF VELOCITY   REVCUT ',F11.1,'  KTS',/ 
     4  '   DELTA LIFT COEFFICIENT     CLREV  ',F11.5,/ 
     5  '   DELTA DRAG COEFFICIENT     CDREV  ',F11.5,/ 
     6  '   THRUST INPUT OPTION        INTHRV ',I11,//
     7  ' INPUT NET THRUST VALUES PER ENGINE DURING REVERSAL',/ 
     8  '   VELOCITY, FT/SEC   VELRV ',10F10.1,/
     9  '   THRUST, LB         THRRV ',10F10.1) 
  
 9000 WRITE(IU6,9001) IU5
 9001 FORMAT (//' ERROR READING NAMELIST $TOLIN FROM UNIT',I3,/,
     2          ' PROGRAM ABORTED IN SUBROUTINE DEFTOL.',/)
      STOP

      END

CCCCCCCCCCCCCCCCCCCCCCC  SUBROUTINE SEPARATOR  CCCCCCCCCCCCCCCCCCCCCCCCC

      BLOCK DATA TLNMIN 

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c     ohad 15/7/08
c      IMPLICIT INTEGER*8 (I-N)
      IMPLICIT INTEGER*4 (I-N)
  
C DEFAULT VALUES FOR TAKEOFF AND LANDING INPUT DATA (NAMELIST $TOLIN) 
  
      COMMON /BALFLD/ ALPRUN, ARGEF, BRAKMU, CDGRO , CDSPOL, CLSPOL,
     1                RHOA, ROLLMU, TIBRA, TICUT, TINC, TISPA, VANGL,
     2                WHGT, PILOTT, CDEOT, ITIME, ISPOL, IREV 

      COMMON / LAND / ALMXLD,APRANG,CLLDM ,TISPOL,TIBRAK,CDMW  ,DMO   , 
     1                ACCLIM,DELTRN,OBSLD ,DELHAP,DELDFL,CDMLD ,APRHGT, 
     2                SWING, AR, THDRY, CLLD(10), CDLD(10), ALPLD(10),
     3                MAGRUP

      COMMON /TOLTH / APA, ANS1, DTCT, SPDSND, THFACT, THREF, THRTO(10),
     1                THRLD(10), VELTO(10), VELLD(10), INTHTO, INTHLD

      COMMON /TREVRS/ RVFACT, TIRVRS, TIRVA, REVCUT, CLREV, CDREV,
     1                VELRV(10), THRRV(10), INTHRV

      COMMON /TOCOMM/ CDMT  ,DMT   ,ALPROT,DELTCL,SWREF ,ARRET ,VROTAT, 
     1                OBSTO ,DELTRO,DELVTO,ALMXTO,TIGEAR,CLTOM ,CDMTO , 
     2                CDDP(10), CLDPOC(10), ALPTO(10), CLTO(10),
     3                CDTO(10), IBAL

      COMMON /ROTSPD/ VROT, VEE2
  
      COMMON /PRAERO/ ALPRO(10,10), CLPRO(10,10), CDPRO(10,10),
     1                DFLAP(10), TXF, ALPMIN, GAMLIM

      COMMON /NOISEP/ NOPRO, NPFILE, NOISE

      COMMON /TAXFUL/ TAXOFL, ITXOUT

      COMMON /GEFSW / INCGEF

      DATA VELTO/0.0,50.,100.,150.,200.,250.,300.,350.,400.,450./,
     1     ALPRUN, TINC, CDMTO, THRTO/13*0./, ALPROT, ALMXTO/2*25./,
     2     ITIME, INTHTO/2*0/, VROTAT/1.05/, THFACT/1./, WHGT/8./,
     3     TIGEAR/2./, CDDP, CLDPOC/20*0./, APRHGT/100.001/,
     4     IBAL, ISPOL, IREV/3*1/, DELTRO/.2/, DELVTO/4./, ALMXLD/25./,
     5     VELLD/0.,50.,100.,150.,200.,250.,300.,350.,400.,450./, 
     6     OBSLD/50./, CLSPOL, CDSPOL, APA, CDMLD, THRLD, DTCT/15*0./,
     7     TISPA, TIBRA, TICUT/3*3./, BRAKMU/.3/, ROLLMU/.025/,
     8     VANGL, TISPOL/2*2./, TIBRAK/4./, ACCLIM/16./, PILOTT/1./, 
     9     DELHAP/10./, DELDFL/10./, DELTRN/.25/, DELTCL/.2/, ARGEF/1./,
     *     INTHLD/0/, THDRY/0./, APRANG/-3./, INCGEF/1/, ITXOUT/0/

      DATA VELRV/0.0,50.,100.,150.,200.,250.,300.,350.,400.,450./,
     1     THRRV, RVFACT, CLREV, CDREV/13*0./, INTHRV/-1/, TIRVRS/5./,
     2     TIRVA/1000./, REVCUT/-1000./,
     3     ALPTO, ALPLD, CDTO, CDLD, CLTO, CLLD/60*0./,
     4     VROT, VEE2, ALPMIN/3*0./, GAMLIM/0./,
     5     ALPRO, CLPRO, CDPRO /300*0./,
     6     DFLAP /1.,2.,3.,4.,5.,6.,7.,8.,9.,10./,
     7     NOPRO, NPFILE, NOISE /3*0/, TAXOFL /0./, TXF /-1./
  
      END 

CCCCCCCCCCCCCCCCCCCCCCC  SUBROUTINE SEPARATOR  CCCCCCCCCCCCCCCCCCCCCCCCC

      SUBROUTINE TOFF (FAROFF,RMPWT,IPRNT,ARN,SW,GLOV,NENG,FORCE2)
  
C EVALUATE ENGINE-OUT SECOND SEGMENT CLIMB GRADIENT CONSTRAINT
C COMPUTE TAKEOFF PROFILE AND FIELD LENGTH
C COMPUTE BALANCED FIELD LENGTH IF REQUESTED
C     FAROFF = TAKEOFF OR BALANCED FIELD LENGTH 
C     GROSWT = AIRCRAFT CURRENT RAMP WEIGHT 
C     IPRNT  = PRINT SWITCH 
C     ARN,SW,GLOV = CURRENT ASPECT RATIO, WING AREA, AND GLOVE AREA 
C     NENG   = NUMBER OF ENGINES
C     FORCE2 = THRUST SURPLUS AFTER MEETING SECOND SEGMENT CLIMB
C              GRADIENT (IF NEGATIVE, DELTA THRUST REQUIRED)
C KEY CONTROL INTEGERS
C     IBAL   = 1, PERFORM BALANCED FIELD LENGTH CALCULATIONS 
C     ITER   = BALANCED FIELD LENGTH ITERATION COUNTER

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c     ohad 15/7/08
c      IMPLICIT INTEGER*8 (I-N)
      IMPLICIT INTEGER*4 (I-N)
  
      COMMON /UNITS / IU5, IU6, IU7, IU8, IU9, IU16, IU17, IU18
      COMMON /BALFLD/ ALPRUN, ARGEF, BRAKMU, CDGRO, CDSPOL, CLSPOL,
     1                RHOA, ROLLMU, TIBRA, TICUT, TINC, TISPA, VANGL,
     2                WHGT, PILOTT, CDEOT, ITIME, ISPOL, IREV
      COMMON /SCRTCH/ TG(125,2), DG(125,2), VG(125,2), THG(125,2),
     1                CGL(125,2),  CGD(125,2), ACG(125,2), TS(125,2),
     2                DS(125,2), VS(125,2), THS(125,2), CSL(125,2),
     3                CSD(125,2), ACS(125,2), TR(250), DR(250), VR(250),
     4                ALR(250), THR(250), CLR(250), CDR(250), ACR(250),
     5                T(250), D(250), ALT(250), V(250), GAM(250),
     6                ALP(250), TH(250), CLL(250), CDD(250), ACL(250),
     7                KDUM(3200)
      COMMON /TOCOMM/ CDMT  ,DMT   ,ALPROT,DELTCL,SWREF ,ARRET ,VROTAT, 
     1                OBSTO ,DELTRO,DELVTO,ALMXTO,TIGEAR,CLTOM ,CDMTO , 
     2                CDDP(10), CLDPOC(10), ALPTO(10), CLTO(10),
     3                CDTO(10), IBAL
      COMMON /TOLTH / APA, ANS1, DTCT, SPDSND, THFACT, THREF, THRTO(10),
     1                THRLD(10), VELTO(10), VELLD(10), INTHTO, INTHLD
      COMMON /ROTDAT/ VTR(2), ALFROT, ALPMAX, CDGEAR, CDEOUT, SPAN,
     1                VSTALL, V005, NE, IFAIL, ICRIT, ILAG
      COMMON /ROTSPD/ VROT, VEE2
      COMMON / FORT / IFITE
      COMMON /TAXFUL/ TAXOFL, ITXOUT
  
      DIMENSION IRUN(2), ISTP(2)
      DATA      RAD /0.0174533/


C     SCALE AERODYNAMIC DRAG ASSUMING PARABOLIC POLAR 
C     INITIALIZE CONSTANTS AND CONFIGURATION DATA 
  
      SPAN    = SQRT( ARN * (SW - GLOV) )
      CDM     = CDMT + DMT / SW
      GROSWT  = RMPWT - ITXOUT*TAXOFL
      DO 10 I = 1,10
      CDTO(I) = (CDTO(I) - CDMTO) * ARRET / ARN + CDM
   10 CONTINUE
      CDGEAR  = CDGRO / SW
      CDEOUT  = CDEOT / SW
      CDMTO   = CDM
      ARRET   = ARN
      SWREF   = SW
      ZERO    = 0.
      DBAL    = 0.
      VSTR    = 0.
      VSSR    = 0.
      VTR(1)  = 0.
      VTR(2)  = 0.
      VRM5    = 0.
      VEFR    = 0.
      FFCT    = 1.15 - 0.15*IFITE
      IFCT    = FFCT*100.01

C     PRINT CURRENT DRAG POLAR AND THRUST SCHEDULE

      IF ( IPRNT .LE. 0 ) GO TO 15
      WRITE(IU6, 510)
      WRITE(IU6, 520) (ALPTO(I), I = 1,10)
      WRITE(IU6, 530) (CLTO (I), I = 1,10)
      WRITE(IU6, 540) (CDTO (I), I = 1,10)
      WRITE(IU6, 545) CDMTO, CDGEAR, CDEOUT, CLTOM, GROSWT
      WRITE(IU6, 550)
      WRITE(IU6, 560) (VELTO(I), I = 1,10) 
      WRITE(IU6, 570) (THRTO(I), I = 1,10)

   15 SPD     = 1852./(.3048*3600.)
      NE      = NENG
      IF ( NE .EQ. 1 ) IBAL  = 0 
      RHOA    = ANS1 * SW * 0.5
      VSTALL  = SQRT( GROSWT / (CLTOM * RHOA) ) / SPD
      VRTATE  = VSTALL
      CALL ORIDE (VRTATE,VROTAT)
      VOSREQ  = 1.2 * VSTALL
      VROT    = VRTATE * SPD
      VEND    = 1.5 * VSTALL * SPD
      IF ( VROT .GT. VEND ) VEND = VROT

C     CONSTRAIN FIGHTER TAKEOFF SPEED TO BE GREATER THAN OR EQUAL TO
C     THE SPEED FOR A .5 PERCENT CLIMB GRADIENT - ONE ENGINE OUT

      IF ( IFITE .EQ. 0 ) GO TO 17
      GAM2 = .005
      SG   = SIN( GAM2 )
      CG   = COS( GAM2 )
C     V005 MUST BE .GE. 1.1 VSTALL
      V005 = 1.1 * VSTALL * SPD
      IRR  = 0
      ILAG = 2

C     DETERMINE IF CLIMB GRADIENT IS MET AT 1.1 VSTALL
   21 NEOP = NE - 1
      IF ( NE .EQ. 1 ) NEOP = 1
      THRU = XINT1( V005,VELTO,10,THRTO ) * NEOP
      CALL CLGRAD ( V005, RHOA, THRU, GROSWT, CG, SG, ALPTO, CLTO, CDTO,
     1              ZERO, CDEOUT, ALPRUN, TINC, RAD, ALP2, FORCE2 )
      IF ( IRR .GT. 1 ) GO TO 31
      IF ( FORCE2 .GT. 0.0 ) GO TO 17
      FEPS = 0.0000001*THRU

C     INCREASE V005 UNTIL CRITERION IS MET

C     FIRST ITERATION
      IRR  = 2
      ILAG = 3
      VO   = V005
      FORO = FORCE2
      V005 = 1.05 * V005
      GO TO 21

C     SUBSEQUENT ITERATIONS
   31 IRR  = IRR + 1
      IF ( ABS(FORCE2-FEPS) .LT. FEPS .OR. IRR .GT. 15 ) GO TO 17
      DELV = (V005 - VO) * (FORCE2 - FEPS) / (FORO - FORCE2)
      IF ( ABS(DELV) .GT. 5.*SPD ) DELV = SIGN( 5.*SPD, DELV)

C     IF DIRECTION IS WRONG, HALVE INTERVAL
      IF ( DELV*FORCE2 .LT. 0. ) GO TO 36
      V005 = (VO + V005) / 2.
      GO TO 21

   36 VO   = V005
      FORO = FORCE2
      V005 = V005 + DELV
      GO TO 21


C     SET UP GROUND RUN TABLES
c     ohad 16/7/08 - 0.0d0 rather than 0.
c   17 CALL GEFECT ( ALPRUN, 0. , 0.,     ALPTO, CLTO, CDTO, CDMTO, CL, CDG, 
c     1              ARRET*ARGEF, WHGT, SPAN )
   17 CALL GEFECT ( ALPRUN, 0.0d0 , 0.0d0,     
     1     ALPTO, CLTO, CDTO, CDMTO, CL, CDG, 
     1              ARRET*ARGEF, WHGT, SPAN )
      CDG    = CDG + CDGEAR
      CALL GRRUN ( VEND, NE, GROSWT, CDG, CL, IRUN, CDEOUT )
  
C     FIND ROTATION SPEED TO MEET MINIMUM UNSTICK REQUIREMENTS AND
C     DETERMINE PROFILE FROM ROTATION TO OBSTACLE

      ALPMAX = XINT1( CLTOM/1.44, CLTO, 10, ALPTO ) 
      IF ( ALPMAX .GT. ALMXTO) ALPMAX = ALMXTO
      ALFROT = ALPROT 
      IF ( ALFROT .GT. ALPMAX ) ALFROT = ALPMAX 
      IF ( IBAL  .EQ. 0 ) GO TO 310
      ICRIT  = 0
      IFAIL  = 0
      CALL ROTCL ( VROT, GROSWT, DLO, TLO, VLO, ALLO, ILO, DOBST, TOBST,
     1             VOBST, ALOST, GAOST, IOBST )
      IF ( IFAIL .EQ. 2 ) GO TO 400

C     SET UP DECELERATION TO STOP TABLES

      CALL DECEL ( VEND, NE, GROSWT, CDG, CL, ISTP )

C     SECOND SEGMENT CLIMB GRADIENT CALCULATIONS - ONE ENGINE OUT 
  
C     CALCULATE REQUIRED CLIMB GRADIENT - GAM2
      GAM2 = ATAN( 0.018 + 0.003 * NE )
      IF ( IFITE .EQ. 1 ) GAM2 = 0.025
      SG   = SIN( GAM2 )
      CG   = COS( GAM2 )

C     VOBST MUST BE .GE. 1.2 VSTALL
      V2   = VOBST * SPD
      IRR  = 0
      IF ( V2 .GE. VOSREQ*SPD .AND. IFAIL .EQ. 0 ) GO TO 20
      V2   = VOSREQ * SPD
      IRR  = 1
      VSTR = 1.

C     DETERMINE NET THRUST IF CLIMB GRADIENT IS MET
   20 NEOP = NE - 1
      IF ( NE .EQ. 1 ) NEOP = 1
      THRU = XINT1( V2,VELTO,10,THRTO ) * NEOP
      CALL CLGRAD ( V2, RHOA, THRU, GROSWT, CG, SG, ALPTO, CLTO, CDTO,
     1              ZERO, CDEOUT, ALPRUN, TINC, RAD, ALP2, FORCE2 )
      IF ( IRR .GT. 1 ) GO TO 30
      IF ( FORCE2 .GT. 0.0 ) GO TO 40
      FEPS = 0.0000001*THRU

C     SECOND SEGMENT CLIMB GRADIENT CRITERION FAILED
C     INCREASE V2 UNTIL CRITERION IS MET

C     FIRST ITERATION
      IRR  = 2
      VO   = V2
      FORO = FORCE2
      V2   = 1.05 * V2
      GO TO 20

C     SUBSEQUENT ITERATIONS
   30 IRR  = IRR + 1
      IF ( ABS(FORCE2-FEPS) .LE. FEPS .OR. IRR .GT. 20 ) GO TO 40
      DELV = (V2 - VO) * (FORCE2 - FEPS) / (FORO - FORCE2)
      IF ( ABS(DELV) .GT. 5.*SPD ) DELV = SIGN( 5.*SPD, DELV)

C     IF DIRECTION IS WRONG, HALVE INTERVAL
      IF ( DELV*FORCE2 .LT. 0. ) GO TO 35
      V2   = (VO + V2) / 2.
      GO TO 20

   35 VO   = V2
      FORO = FORCE2
      V2   = V2 + DELV
      GO TO 20

C     IF V2 HAS CHANGED, DETERMINE ROTATION SPEED SUCH THAT 
C     V2 IS REACHED AT THE OBSTACLE WITH ONE ENGINE OUT

   40 IF ( IRR .EQ. 0 ) GO TO 60
      M     = 0
      ICRIT = 2
      DVR   = (V2 - VOBST * SPD) * 1.5
   50 VO    = VROT
      VOO   = VOBST * SPD
      VROT  = VO + DVR

      IFAIL = 0
      CALL ROTCL ( VROT, GROSWT, DLO, TLO, VLO, ALLO, ILO, DOBST, TOBST,
     1             VOBST, ALOST, GAOST, IOBST )
      M     = M + 1
      DVR   = V2 - VOBST * SPD
      IF ( (VOBST*SPD - VOO) .GT. .01 )
     1 DVR  = (VROT - VO) * (V2 - VOBST*SPD) / (VOBST*SPD - VOO)
      IF ( ABS(DVR) .GT. 5.*SPD ) DVR = SIGN( 5.*SPD, DVR)
      IF ( ABS(DVR) .GT. .0001 .AND. M .LT. 15 ) GO TO 50
      IF ( VSTR .GT. 0. ) VSTR = VROT
      IF ( IRR  .GT. 1  ) VSSR = VROT
      IF ( IFAIL .GT. 0 ) GO TO 400

C     TABULAR DATA HAS BEEN DEFINED, SATISFY FAR PART 25.107(E)(3)  
C     FIND TAKEOFF DISTANCE FOR ROTATION SPEED VRT5 = VROT - 5 KNOTS

   60 SROT = VROT
      IF ( IFITE .EQ. 1 ) GO TO 110
      ITER = 0
   80 VRT5 = VROT - 5. * SPD
      IRT5 = 1 + VRT5 / DELVTO
      IF ( IRT5 .GE. IRUN(2) ) IRT5 = IRUN(2) - 1
      DTR5 = 1. + VRT5 / DELVTO - IRT5 
      DRT5 = DG(IRT5,2) * (1.-DTR5) + DG(IRT5+1,2) * DTR5

C     CALCULATE ROTATION AND CLIMB-TO-OBSTACLE DISTANCE STARTING
C       AT ROTATION SPEED VRT5

      ICRIT = 2
      IFAIL = 0
      CALL ROTCL ( VRT5, GROSWT, DLO5, TLO5, VLO5, ALO5, ILO5, DOBS5,
     1             TOBS5, VOBS5, ALOS5, GAOS5, IOBS5 )
      DTO5 = DOBS5

C     CALCULATE GROUND RUN, ROTATION AND CLIMB-TO-OBSTACLE DISTANCE
C       STARTING AT VRT5 AND ROTATING AT VROT

      IRT  = 1 + VROT / DELVTO
      IF ( IRT .GE. IRUN(2) ) IRT = IRUN(2) - 1
      DTRT = 1. + VROT / DELVTO - IRT 
      DRT2 = DG(IRT,2) * (1.-DTRT) + DG(IRT+1,2) * DTRT
      DROT = DRT2 - DRT5

C     RECALCULATE ROTATION AND CLIMB TO OBSTACLE

      CALL ROTCL ( VROT, GROSWT, DLO, TLO, VLO, ALLO, ILO, DOBST, TOBST,
     1             VOBST, ALOST, GAOST, IOBST )
      DTO2 = DROT + DOBST
      IF ( IFITE .EQ. 1 ) DTO2 = DROT + DLO

C     IF TAKEOFF DISTANCE WITH EARLY ROTATION IS GREATER THAN THAT
C       AT NORMAL ROTATION, INCREASE VROT UNTIL THEY ARE EQUAL
    
      DELDE = DTO5 - DTO2
      IF ( ITER .GT. 0 ) GO TO 90
      IF ( DELDE .LT. .1 ) GO TO 110
      DELV2 = 5. * SPD
      GO TO 100

   90 IF ( ABS(DELDE) .LT. .1 .OR. ITER .GT. 9 ) GO TO 110
      DELV2 = DELV2 * DELDE / ( DELDO - DELDE )
      IF ( ABS(DELV2) .GT. 5.*SPD ) DELV2 = SIGN( 5.*SPD, DELV2)
  100 ITER  = ITER + 1
      DELDO = DELDE
      VROT  = VROT + DELV2
      VRM5  = VROT
      GO TO 80

C     FIRST GUESS AT ENGINE FAILURE VELOCITY - VEF = VROT - 5 KNOTS
C     IF THIS IS TOO LOW, VROT WILL HAVE TO BE REDEFINED TO MEET
C     FAR PART 25.107(E)(3) WHICH REQUIRES TAKEOFF WITH ONE ENGINE
C     OUT AT A ROTATION SPEED 5 KNOTS LESS THAN VROT
 
  110 IF ( IFAIL .GT. 0 ) GO TO 400
      IF ( NE .EQ. 1 ) GO TO 310
      VEF  = VROT - 5.*SPD*(1-IFITE)
      IREC = 0
      ITER = 0

C     ENSURE THAT VROT WILL NOT BE LESS THAN V1 - THE DECISION SPEED

      IRT  = 1 + VROT / DELVTO
      IF ( IRT .GE. IRUN(2) ) IRT = IRUN(2) - 1
      DTRT = 1. + VROT / DELVTO - IRT 
      DECT = PILOTT*(1-IFITE) + 3.*IFITE
      TAVF = TG(IRT,2) * (1.-DTRT) + TG(IRT+1,2) * DTRT - DECT
      IVF  = IRT
  120 IF ( TG(IVF,2) .LE. TAVF ) GO TO 130
      IVF  = IVF - 1
      GO TO 120
  130 DAVF = (TAVF - TG(IVF,2)) / (TG(IVF+1,2) - TG(IVF,2))
      VTRY = VG(IVF,2) * (1.-DAVF) + VG(IVF+1,2) * DAVF
      IF (VTRY .LT. VEF ) VEF = VTRY

C     ACCELERATE-STOP DISTANCE, FAR PART 25.109
C     FIND ENGINE FAILURE DISTANCES AND DECISION SPEED TIME

  140 IEF  = 1 + VEF / DELVTO
      IF ( IEF .GE. IRUN(2) ) IEF = IRUN(2) - 1
      DTEF = 1. + VEF / DELVTO - IEF 
      DEF2 = DG(IEF,2) * (1.-DTEF) + DG(IEF+1,2) * DTEF
      DEF1 = DG(IEF,1) * (1.-DTEF) + DG(IEF+1,1) * DTEF
      DDEF = DEF2 - DEF1
      TV1  = TG(IEF,2) * (1.-DTEF) + TG(IEF+1,2) * DTEF + PILOTT
      IV1  = IEF

C     FIND DECISION SPEED - V1

  150 IF ( TG(IV1+1,2) .GT. TV1 ) GO TO 160
      IV1  = IV1 + 1
      GO TO 150

  160 IF ( IV1 .GE. IRUN(2) ) IV1 = IRUN(2) - 1
      DTV1 = (TV1 - TG(IV1,2)) / (TG(IV1+1,2) - TG(IV1,2))
      V1   = VG(IV1,2) * (1.-DTV1) + VG(IV1+1,2) * DTV1

C     FIND TIME, VELOCITY AND DISTANCE AT START OF BRAKING FOR
C       ONE ENGINE OUT - TB2, VB2 AND DB2

      TB2  = TV1 + 2.
      IB2  = IV1
  170 IF ( TG(IB2+1,2) .GT. TB2 ) GO TO 180
      IB2  = IB2 + 1
      GO TO 170

  180 IF ( IB2 .GE. IRUN(2) ) IB2 = IRUN(2) - 1
      DTB2 = (TB2 - TG(IB2,2)) / (TG(IB2+1,2) - TG(IB2,2))
      VB2  = VG(IB2,2) * (1.-DTB2) + VG(IB2+1,2) * DTB2
      DB2  = DG(IB2,2) * (1.-DTB2) + DG(IB2+1,2) * DTB2 - DDEF

C     FIND STOPPING DISTANCE FROM A VELOCITY OF VB2

      TST2 = TS(IB2,2) * (1.-DTB2) + TS(IB2+1,2) * DTB2
      DST2 = DS(IB2,2) * (1.-DTB2) + DS(IB2+1,2) * DTB2

C     FIND TOTAL ACCELERATE-STOP DISTANCE - ONE ENGINE OUT

      DAS2 = DB2 + DST2
      IF ( IFITE .EQ. 1 ) THEN
         DAS  = DAS2
         DAS1 = 0.
         GO TO 205
      ENDIF

C     FIND TIME AT V1 AND TIME, VELOCITY AND DISTANCE AT START OF
C       BRAKING FOR ALL ENGINES OPERATING - TB1, VB1 AND DB1

      TB1  = TG(IV1,1) * (1.-DTV1) + TG(IV1+1,1) * DTV1 + 2.
      IB1  = IV1
  190 IF ( TG(IB1+1,1) .GT. TB1 ) GO TO 200
      IB1  = IB1 + 1
      GO TO 190

  200 IF ( IB1 .GE. IRUN(1) ) IB1 = IRUN(1) - 1
      DTB1 = (TB1 - TG(IB1,1)) / (TG(IB1+1,1) - TG(IB1,1))
      VB1  = VG(IB1,1) * (1.-DTB1) + VG(IB1+1,1) * DTB1
      DB1  = DG(IB1,1) * (1.-DTB1) + DG(IB1+1,1) * DTB1

C     FIND STOPPING DISTANCE FROM A VELOCITY OF VB1

      TST1 = TS(IB1,1) * (1.-DTB1) + TS(IB1+1,1) * DTB1
      DST1 = DS(IB1,1) * (1.-DTB1) + DS(IB1+1,1) * DTB1

C     FIND TOTAL ACCELERATE-STOP DISTANCE - ALL ENGINES OPERATING

      DAS1 = DB1 + DST1
      DAS  = MAX( DAS1, DAS2 )

C     FIND TAKEOFF DISTANCE - ONE ENGINE OUT

  205 IRT  = 1 + VROT / DELVTO
      IF ( IRT .GE. IRUN(2) ) IRT = IRUN(2) - 1
      DTRT = 1. + VROT / DELVTO - IRT 
      DRT2 = DG(IRT,2) * (1.-DTRT) + DG(IRT+1,2) * DTRT
      DROT = DRT2 - DDEF

C     IF NECESSARY, RECALCULATE ROTATION AND CLIMB TO OBSTACLE

      ICRIT = 2
      IFAIL = 0
      IF ( IREC .GT. 0 )
     1 CALL ROTCL ( VROT, GROSWT, DLO, TLO, VLO, ALLO, ILO, DOBST,
     2              TOBST, VOBST, ALOST, GAOST, IOBST )
      IF ( IFAIL .GT. 0 ) GO TO 400

      DTO2  = DROT + DOBST
      IF ( IFITE .EQ. 1 ) DTO2 = DROT + DLO
      DELST = DAS - DTO2
      IF ( ABS(DELST) .LT. .1 .OR. ITER .GT. 9 ) GO TO 230
      DELV2 = - DELST * VEF / (DAS + DTO2) 
      ITER  = ITER + 1
      IF ( ITER .GT. 1 ) GO TO 210
      IF ( DELV2 .GT. 0. ) IREC = 1
      GO TO 220
  210 DELS  = DELSO - DELST
      IF ( ABS(DELS) .GT. .01 ) DELV2 = DELST * (VEF - VOO) / DELS 
  220 VOO   = VEF
      DELSO = DELST
      VEF   = VEF + DELV2
      IF ( IREC .EQ. 0 ) GO TO 140
      IF ( IFITE .EQ. 0 ) THEN
         VROT = VEF + 5. * SPD
      ELSE
         VROT = VB2
      ENDIF
      VEFR  = VROT
      GO TO 140

C     BALANCED FIELD LENGTH CALCULATIONS ARE COMPLETE - PRINT RESULTS

  230 DBAL  = (DAS + DTO2) / 2.
      IF ( IPRNT .LE. 0 ) GO TO 300
      IF ( IFITE .EQ. 1 ) GO TO 255

C     PRINT ALL-ENGINES-OPERATING ACCELERATE-STOP RESULTS

      DGV1 = DG(IV1,1) * (1.-DTV1) + DG(IV1+1,1) * DTV1
      IF ( ITIME .EQ. 0 ) GO TO 240

C     OUTPUT DETAILED PROFILE

      WRITE(IU6, 410)
      WRITE(IU6, 450)
      L = 1
      WRITE(IU6, 460) (TG(I,L), DG(I,L), ZERO, VG(I,L)/SPD,
     1                VG(I,L)/SPDSND, ZERO, ALPRUN, TINC, THG(I,L),
     2                CGL(I,L), CGD(I,L), CGL(I,L)/CGD(I,L), ACG(I,L),
     3                I = 1,IB1)
      THB1 = THG(IB1,1) * (1.-DTB1) + THG(IB1+1,1) * DTB1
      CLB1 = CGL(IB1,1) * (1.-DTB1) + CGL(IB1+1,1) * DTB1
      CDB1 = CGD(IB1,1) * (1.-DTB1) + CGD(IB1+1,1) * DTB1
      ACB1 = ACG(IB1,1) * (1.-DTB1) + ACG(IB1+1,1) * DTB1
      WRITE(IU6, 460) TB1, DB1, ZERO, VB1/SPD, VB1/SPDSND, ZERO, ALPRUN,
     1                TINC, THB1, CLB1, CDB1, CLB1/CDB1, ACB1
      WRITE(IU6, 470)
      J    = IB1 + 1
      WRITE(IU6, 460) (TB1+TST1-TS(J-I,L), DAS1-DS(J-I,L), ZERO,
     1                VS(J-I,L)/SPD, VS(J-I,L)/SPDSND, ZERO, ALPRUN,
     2                TINC, THS(J-I,L), CSL(J-I,L), CSD(J-I,L),
     3                CSL(J-I,L)/CSD(J-I,L), ACS(J-I,L), I = 1,IB1)

  240 WRITE(IU6, 250) V1/SPD, TB1-2., DGV1, VB1/SPD, TB1, DB1, ZERO,
     1                TST1+TB1, DAS1
  250 FORMAT (/' ACCELERATE - STOP DISTANCE',T33,'VELOCITY     TIME',
     1 T53,'DISTANCE',/' ALL ENGINES OPERATING',T35,
     2 'KNOTS      SEC.     FEET',//
     3 '     DECISION SPEED (V1)',T31,F10.2,F9.2,F11.2,/
     4 '     BRAKE APPLICATION (T1+2)',T31,F10.2,F9.2,F11.2,/
     5 '     COMPLETE STOP      ',T31,F10.2,F9.2,F11.2 )

C     PRINT ONE-ENGINE-OUT ACCELERATE-STOP RESULTS

  255 TEF  = TG(IEF,1) * (1.-DTEF) + TG(IEF+1,1) * DTEF
      TTEF = TG(IEF,2) * (1.-DTEF) + TG(IEF+1,2) * DTEF - TEF
      TV12 = TEF + PILOTT
      DGV2 = DG(IV1,2) * (1.-DTV1) + DG(IV1+1,2) * DTV1 - DDEF
      TB2  = TV12 + 2.
      IF ( ITIME .EQ. 0 ) GO TO 260

C     OUTPUT DETAILED PROFILE

      WRITE(IU6, 420)
      WRITE(IU6, 450)
      L    = 1
      WRITE(IU6, 460) (TG(I,L), DG(I,L), ZERO, VG(I,L)/SPD,
     1                VG(I,L)/SPDSND, ZERO, ALPRUN, TINC, THG(I,L),
     2                CGL(I,L), CGD(I,L), CGL(I,L)/CGD(I,L), ACG(I,L),
     3                I = 1,IEF)
      THEF = THG(IEF,1) * (1.-DTEF) + THG(IEF+1,1) * DTEF
      CLEF = CGL(IEF,1) * (1.-DTEF) + CGL(IEF+1,1) * DTEF
      CDEF = CGD(IEF,1) * (1.-DTEF) + CGD(IEF+1,1) * DTEF
      ACEF = ACG(IEF,1) * (1.-DTEF) + ACG(IEF+1,1) * DTEF
      WRITE(IU6, 460) TEF, DEF1, ZERO, VEF/SPD, VEF/SPDSND, ZERO,
     1                ALPRUN, TINC, THEF, CLEF, CDEF, CLEF/CDEF, ACEF
      WRITE(IU6, 470)
      L    = 2
      J    = IEF + 1
      WRITE(IU6, 460) (TG(I,L)-TTEF, DG(I,L)-DDEF, ZERO, VG(I,L)/SPD,
     1                VG(I,L)/SPDSND, ZERO, ALPRUN, TINC, THG(I,L),
     2                CGL(I,L), CGD(I,L), CGL(I,L)/CGD(I,L), ACG(I,L),
     3                I = J,IB2)
      THB2 = THG(IB2,2) * (1.-DTB2) + THG(IB2+1,2) * DTB2
      CLB2 = CGL(IB2,2) * (1.-DTB2) + CGL(IB2+1,2) * DTB2
      CDB2 = CGD(IB2,2) * (1.-DTB2) + CGD(IB2+1,2) * DTB2
      ACB2 = ACG(IB2,2) * (1.-DTB2) + ACG(IB2+1,2) * DTB2
      WRITE(IU6, 460) TB2, DB2, ZERO, VB2/SPD, VB2/SPDSND, ZERO, ALPRUN,
     1                TINC, THB2, CLB2, CDB2, CLB2/CDB2, ACB2
      WRITE(IU6, 470)
      J    = IB2 + 1
      WRITE(IU6, 460) (TB2+TST2-TS(J-I,L), DAS2-DS(J-I,L), ZERO,
     1                VS(J-I,L)/SPD, VS(J-I,L)/SPDSND, ZERO, ALPRUN,
     2                TINC, THS(J-I,L), CSL(J-I,L), CSD(J-I,L),
     3                CSL(J-I,L)/CSD(J-I,L), ACS(J-I,L), I = 1,IB2)

  260 WRITE(IU6, 270) VEF/SPD, TEF, DEF1
      IF ( IFITE .EQ. 0 ) THEN
         WRITE(IU6, 271) V1/SPD, TV12, DGV2,
     1                   VB2/SPD, TB2, DB2, ZERO, TST2+TB2, DAS2
      ELSE
         WRITE(IU6, 272) VB2/SPD, TB2, DB2, ZERO, TST2+TB2, DAS2
      ENDIF
  270 FORMAT (/' ACCELERATE - STOP DISTANCE',T33,'VELOCITY     TIME',
     1 T53,'DISTANCE',/' ONE ENGINE OUT (OEO)',T35,
     2 'KNOTS      SEC.     FEET',//
     3 '     ENGINE FAILURE (VEF)',T31,F10.2,F9.2,F11.2)
  271 FORMAT ('     DECISION SPEED (V1)',T31,F10.2,F9.2,F11.2,/
     1 '     BRAKE APPLICATION (T1+2)',T31,F10.2,F9.2,F11.2,/
     2 '     COMPLETE STOP      ',T31,F10.2,F9.2,F11.2 )
  272 FORMAT ('     BRAKE APPLICATION (TEF+3)',T31,F10.2,F9.2,F11.2,/
     2 '     COMPLETE STOP      ',T31,F10.2,F9.2,F11.2 )

C     PRINT ONE-ENGINE-OUT TAKEOFF RESULTS

      TROT = TG(IRT,2) * (1.-DTRT) + TG(IRT+1,2) * DTRT - TTEF
      IF ( ITIME .EQ. 0 ) GO TO 280

C     OUTPUT DETAILED PROFILE

      WRITE(IU6, 430)
      WRITE(IU6, 450)
      L    = 1
      WRITE(IU6, 460) (TG(I,L), DG(I,L), ZERO, VG(I,L)/SPD,
     1                VG(I,L)/SPDSND, ZERO, ALPRUN, TINC, THG(I,L),
     2                CGL(I,L), CGD(I,L), CGL(I,L)/CGD(I,L), ACG(I,L),
     3                I = 1,IEF)
      WRITE(IU6, 460) TEF, DEF1, ZERO, VEF/SPD, VEF/SPDSND, ZERO,
     1                ALPRUN, TINC, THEF, CLEF, CDEF, CLEF/CDEF, ACEF
      WRITE(IU6, 470)
      L    = 2
      J    = IEF + 1
      WRITE(IU6, 460) (TG(I,L)-TTEF, DG(I,L)-DDEF, ZERO, VG(I,L)/SPD,
     1                VG(I,L)/SPDSND, ZERO, ALPRUN, TINC, THG(I,L),
     2                CGL(I,L), CGD(I,L), CGL(I,L)/CGD(I,L), ACG(I,L),
     3                I = J,IRT)
      THRT = THG(IRT,2) * (1.-DTRT) + THG(IRT+1,2) * DTRT
      CLRT = CGL(IRT,2) * (1.-DTRT) + CGL(IRT+1,2) * DTRT
      CDRT = CGD(IRT,2) * (1.-DTRT) + CGD(IRT+1,2) * DTRT
      ACRT = ACG(IRT,2) * (1.-DTRT) + ACG(IRT+1,2) * DTRT
      WRITE(IU6, 460) TROT, DROT, ZERO, VROT/SPD, VROT/SPDSND, ZERO,
     1                ALPRUN, TINC, THRT, CLRT, CDRT, CLRT/CDRT, ACRT
      WRITE(IU6, 470)
      WRITE(IU6, 460) (TR(I)+TROT, DR(I)+DROT, ZERO, VR(I)/SPD,
     1                VR(I)/SPDSND, ZERO, ALR(I), TINC+ALR(I)-ALPRUN,
     2                THR(I), CLR(I), CDR(I), CLR(I)/CDR(I), ACR(I),
     3                I = 1,ILO)
      WRITE(IU6, 470)
      WRITE(IU6, 460) (T(I)+TROT, D(I)+DROT, ALT(I), V(I)/SPD,
     1                V(I)/SPDSND, GAM(I), ALP(I), TINC+ALP(I)-ALPRUN,
     2                TH(I), CLL(I), CDD(I), CLL(I)/CDD(I), ACL(I),
     3                I = 1,IOBST)

  280 WRITE(IU6, 290) VEF/SPD, TEF, DEF1, ALPRUN, ZERO, VROT/SPD, TROT,
     1                DROT, ALPRUN, ZERO, VLO/SPD, TLO+TROT, DLO+DROT,
     2                ALLO, ZERO, OBSTO, VOBST, TOBST+TROT, DOBST+DROT,
     3                ALOST, GAOST
  290 FORMAT (/' TAKEOFF DISTANCE',T33,'VELOCITY     TIME',T53,
     1 'DISTANCE    ALPHA    GAMMA',/' ONE ENGINE OUT (OEO)',T35,
     2 'KNOTS      SEC.     FEET       DEG.     DEG.',//
     3 '     ENGINE FAILURE (VEF)',T31,F10.2,F9.2,F11.2,2F9.2,/
     4 '     ROTATION SPEED (VR)',T31,F10.2,F9.2,F11.2,2F9.2,/
     5 '     LIFT OFF (VLOF)',T31,F10.2,F9.2,F11.2,2F9.2,/
     6 F8.0,' FOOT OBSTACLE  ',T31,F10.2,F9.2,F11.2,2F9.2 )

C     REDO SECOND SEGMENT CLIMB AND PRINT
      
  300 V2    = VOBST * SPD
      VEE2  = VOBST
      THRU  = XINT1( V2,VELTO,10,THRTO ) * (NE - 1)
      IF ( VROT .GT. SROT )
     1 CALL CLGRAD ( V2, RHOA, THRU, GROSWT, CG, SG, ALPTO, CLTO, CDTO,
     1               ZERO, CDEOUT, ALPRUN, TINC, RAD, ALP2, FORCE2 )
      IF ( IPRNT .EQ. 0 ) GO TO 310
      AGAM2 = ATAN(GAM2) / RAD
      WRITE(IU6, 490) V2/SPD, ALP2, AGAM2, GAM2*100., FORCE2
      IF ( FORCE2 .LT. 0.0 ) WRITE(IU6, 500)

C     DETERMINE TAKEOFF DISTANCE FOR ALL ENGINES OPERATING
 
  310 IRA   = 1 + VROT / DELVTO
      IF ( IRA .GE. IRUN(1) ) IRA = IRUN(1) - 1
      DTRA  = 1. + VROT / DELVTO - IRA 
      DRTA  = DG(IRA,1) * (1.-DTRA) + DG(IRA+1,1) * DTRA
      ICRIT = 1
      CALL ROTCL ( VROT, GROSWT, DLO, TLO, VLO, ALLO, ILO, DOBST, TOBST,
     1             VOBST, ALOST, GAOST, IOBST )
      IF ( IFAIL .GT. 0 ) GO TO 400
      DTOA  = DRTA + DOBST
  
C     REQUIRED FIELD LENGTH IS THE GREATER OF 115 PERCENT OF THE 
C     ALL-ENGINE TAKEOFF FIELD LENGTH AND THE BALANCED FIELD LENGTH
  
      FAROFF = FFCT * DTOA
      IF ( DBAL  .GT. FAROFF ) FAROFF = DBAL
      IF ( IPRNT .EQ. 0 ) RETURN

C     PRINT ALL ENGINES OPERATING TAKEOFF RESULTS

      TROT = TG(IRA,1) * (1.-DTRA) + TG(IRA+1,1) * DTRA
      IF ( ITIME .EQ. 0 ) GO TO 320

C     OUTPUT DETAILED PROFILE

      WRITE(IU6, 440)
      WRITE(IU6, 450)
      L    = 1
      WRITE(IU6, 460) (TG(I,L), DG(I,L), ZERO, VG(I,L)/SPD,
     1                VG(I,L)/SPDSND, ZERO, ALPRUN, TINC, THG(I,L),
     2                CGL(I,L), CGD(I,L), CGL(I,L)/CGD(I,L), ACG(I,L),
     3                I = 1,IRA)
      THRT = THG(IRA,1) * (1.-DTRA) + THG(IRA+1,1) * DTRA
      CLRT = CGL(IRA,1) * (1.-DTRA) + CGL(IRA+1,1) * DTRA
      CDRT = CGD(IRA,1) * (1.-DTRA) + CGD(IRA+1,1) * DTRA
      ACRT = ACG(IRA,1) * (1.-DTRA) + ACG(IRA+1,1) * DTRA
      WRITE(IU6, 460) TROT, DRTA, ZERO, VROT/SPD, VROT/SPDSND, ZERO,
     1                ALPRUN, TINC, THRT, CLRT, CDRT, CLRT/CDRT, ACRT
      WRITE(IU6, 470)
      WRITE(IU6, 460) (TR(I)+TROT, DR(I)+DRTA, ZERO, VR(I)/SPD,
     1                VR(I)/SPDSND, ZERO, ALR(I), TINC+ALR(I)-ALPRUN,
     2                THR(I), CLR(I), CDR(I), CLR(I)/CDR(I), ACR(I),
     3                I = 1,ILO)
      WRITE(IU6, 470)
      WRITE(IU6, 460) (T(I)+TROT, D(I)+DRTA, ALT(I), V(I)/SPD,
     1                V(I)/SPDSND, GAM(I), ALP(I), TINC+ALP(I)-ALPRUN,
     2                TH(I), CLL(I), CDD(I), CLL(I)/CDD(I), ACL(I),
     3                I = 1,IOBST)

  320 WRITE(IU6, 330) VROT/SPD, TROT, DRTA, ALPRUN, ZERO, VLO/SPD,
     1                TLO+TROT, DLO+DRTA, ALLO, ZERO, OBSTO, VOBST,
     2                TOBST+TROT, DTOA, ALOST, GAOST
      IF ( IFITE .EQ. 0 ) WRITE(IU6, 335) IFCT, DTOA*FFCT
  330 FORMAT (/' TAKEOFF DISTANCE',T33,'VELOCITY     TIME',T53,
     1 'DISTANCE    ALPHA    GAMMA',/' ALL ENGINES OPERATING (AEO)',T35,
     2 'KNOTS      SEC.     FEET       DEG.     DEG.',//
     3 '     ROTATION SPEED (VR)',T31,F10.2,F9.2,F11.2,2F9.2,/
     4 '     LIFT OFF (VLOF)',T31,F10.2,F9.2,F11.2,2F9.2,/
     5 F8.0,' FOOT OBSTACLE  ',T31,F10.2,F9.2,F11.2,2F9.2)
  335 FORMAT (/I8,' PERCENT OBSTACLE DISTANCE',T50,F11.2)
      VSF = 1.05 + .05*IFITE
      WRITE(IU6, 480) VSTALL, VSF, VSF*VSTALL, 1.2*VSTALL
      IF ( IFITE  .EQ. 0  ) THEN
         WRITE(IU6, 340) VTR(1)/SPD
         IF ( VTR(2) .GT. 0. ) WRITE(IU6, 345) VTR(2)/SPD
      ELSE
         IF ( ILAG .EQ. 2 ) THEN
            WRITE(IU6, 350) VTR(1)/SPD
            IF ( VTR(2) .GT. 0. ) WRITE(IU6, 351) VTR(2)/SPD
         ELSE IF ( ILAG .EQ. 1 ) THEN
            WRITE(IU6, 355) VTR(1)/SPD
            IF ( VTR(2) .GT. 0. ) WRITE(IU6, 356) VTR(2)/SPD
         ELSE
            WRITE(IU6, 357) VTR(1)/SPD
            IF ( VTR(2) .GT. 0. ) WRITE(IU6, 358) VTR(2)/SPD
         ENDIF
      ENDIF
      IF ( VSTR   .GT. 0. ) WRITE(IU6, 360) VSTR/SPD
      IF ( VSSR   .GT. 0. ) WRITE(IU6, 370) VSSR/SPD
      IF ( VRM5   .GT. 0. ) WRITE(IU6, 380) VRM5/SPD
      IF ( VEFR   .GT. 0. ) THEN
         IF ( IFITE .EQ. 0 ) THEN
            WRITE(IU6, 390) VEFR/SPD
         ELSE
            WRITE(IU6, 391) VEFR/SPD
         ENDIF
      ENDIF
  340 FORMAT ('     VLOF = 1.10*VMU (AEO)    ',F10.2)
  345 FORMAT ('     VLOF = 1.05*VMU (OEO)    ',F10.2)
  350 FORMAT ('     VLOF = 1.10*VSTALL (AEO) ',F10.2)
  351 FORMAT ('     VLOF = 1.10*VSTALL (OEO) ',F10.2)
  355 FORMAT ('     VLOF = POWER OFF VMU (AEO)',F9.2)
  356 FORMAT ('     VLOF = POWER OFF VMU (OEO)',F9.2)
  357 FORMAT ('     VLOF = .005 GRAD VEL (AEO)',F9.2)
  358 FORMAT ('     VLOF = .005 GRAD VEL (OEO)',F9.2)
  360 FORMAT ('     V2   = 1.20*VSTALL       ',F10.2)
  370 FORMAT ('     SECOND SEGMENT CLIMB     ',F10.2)
  380 FORMAT ('     TAKEOFF AT VR - 5 KNOTS  ',F10.2)
  390 FORMAT ('     VEF + 5 KNOTS            ',F10.2)
  391 FORMAT ('     TEF + 3 SECONDS          ',F10.2)
      IF ( IFITE .EQ. 0 ) THEN
         WRITE(IU6, 395) FAROFF
  395 FORMAT (/' FAR TAKEOFF FIELD LENGTH',T50,F11.2,' FEET' )
      ELSE
         WRITE(IU6, 396) DTOA
  396 FORMAT (/' DISTANCE TO OBSTACLE',T50,F11.2,' FEET' )
         IF ( DBAL .GT. 0. ) WRITE(IU6, 397) DBAL
  397 FORMAT (/' CRITICAL FIELD LENGTH',T50,F11.2,' FEET' )
      ENDIF

      IF ( IFAIL .EQ. 0 ) RETURN

  400 WRITE(IU6,2000)
      FAROFF = -1000000.
      RETURN
  
  410 FORMAT (/' * * * ABORTED TAKEOFF - ALL ENGINES OPERATING * * *')
  420 FORMAT (/' * * * ABORTED TAKEOFF - ONE ENGINE OUT * * *')
  430 FORMAT (/' * * * ONE ENGINE OUT TAKEOFF * * *')
  440 FORMAT (/' * * * ALL ENGINES OPERATING TAKEOFF * * *')
  450 FORMAT (/2X,4HTIME,5X,8HDISTANCE,3X,8HALTITUDE,3X,8HVELOCITY,5X,
     1 4HMACH,6X,5HCLIMB,4X,6HATTACK,5X,6HENGINE,5X,6HENGINE,5X,4HLIFT,
     2 5X,4HDRAG,6X,3HL/D,4X,6HACCEL.,/45X,6HNUMBER,5X,5HANGLE,5X,
     3 5HANGLE,4X,9HINCIDENCE,3X,6HTHRUST,4X,6HCOEFF.,3X,6HCOEFF.,4X,
     4 5HRATIO,/8H SECONDS,5X,4HFEET,7X,4HFEET,7X,5HKNOTS,15X,7HDEGREES,
     5 3X,7HDEGREES,4X,7HDEGREES,4X,6HPOUNDS,31X,6HFT/S/S,/)
  460 FORMAT (1F7.2,3F11.2,1F11.4,1F10.3,1F10.3,1F11.3,1F12.1,2F9.4,
     1        2F9.2)
  470 FORMAT ('     ')
  480 FORMAT (/' STALL SPEED (VS)',T31,F10.2,/F9.2,' VS',T31,F10.2,
     1        /'     1.20 VS',T31,F10.2,
     2       //' ROTATION SPEED IN KNOTS REQUIRED TO MEET' )
  490 FORMAT (/' SECOND SEGMENT CLIMB',T31,F10.2,T61,2F9.2,//
     1         '     FLIGHT PATH SLOPE = ',F8.2,' PERCENT' /
     2         '     NET THRUST        = ',F8.0,' POUNDS' )
  500 FORMAT (50H * * * FAILED SECOND SEGMENT CLIMB CRITERION * * * /)
  510 FORMAT (/'1',/'# TAKEOFF PERFORMANCE RESULTS',
     1        //32X,35HDRAG POLAR - GEAR DRAG NOT INCLUDED/)
  520 FORMAT (5X,15HANGLE OF ATTACK,4X,10F10.2)
  530 FORMAT (5X,16HLIFT COEFFICIENT,3X,10F10.4)
  540 FORMAT (5X,16HDRAG COEFFICIENT,3X,10F10.4/)
  545 FORMAT (5X,7HCDMTO =,1F7.4,9X,8HCDGEAR =,F7.4,9X,8HCDEOUT =,
     1        F7.4,9X,7HCLTOM =,F7.4,8X,16HTAKEOFF WEIGHT =,F10.1,/) 
  550 FORMAT (32X,34HINPUT NET THRUST VALUES FOR ENGINE/)
  560 FORMAT (5X,9HVELOCITY ,10F11.1) 
  570 FORMAT (5X,9HTHRUST   ,10F11.1)
 2000 FORMAT(30H  * * *  FAILED TAKEOFF * * * )

      END

CCCCCCCCCCCCCCCCCCCCCCC  SUBROUTINE SEPARATOR  CCCCCCCCCCCCCCCCCCCCCCCCC

      SUBROUTINE GRRUN ( VEND, NE, GROSWT, CDG, CL, IRUN, CDEOUT )

C  COMPUTES ACCELERATION GROUND RUN TABLES FOR USE IN TAKEOFF AND OUTPUT
C     VEND     ENDING VELOCITY FOR TABLES
C     NE       NUMBER OF ENGINES
C     GROSWT   TAKEOFF GROSS WEIGHT
C     CDG      DRAG COEFFICIENT
C     CL       LIFT COEFFICIENT
C     IRUN(1)  NUMBER OF ENTRIES IN TABLE - ALL ENGINES OPERATING 
C     IRUN(2)  NUMBER OF ENTRIES IN TABLE - ONE ENGINE OUT 
C     CDEOUT   ENGINE OUT DELTA DRAG COEFFICIENT

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c     ohad 15/7/08
c      IMPLICIT INTEGER*8 (I-N)
      IMPLICIT INTEGER*4 (I-N)

      COMMON /BALFLD/ ALPRUN, ARGEF, BRAKMU, CDGRO , CDSPOL, CLSPOL,
     1                RHOA, ROLLMU, TIBRA, TICUT, TINC, TISPA, VANGL,
     2                WHGT, PILOTT, CDEOT, ITIME, ISPOL, IREV 

      COMMON /SCRTCH/ TG(125,2), DG(125,2), VG(125,2), THG(125,2),
     1                CGL(125,2),  CGD(125,2), ACG(125,2), TS(125,2),
     2                DS(125,2), VS(125,2), THS(125,2), CSL(125,2),
     3                CSD(125,2), ACS(125,2), TR(250), DR(250), VR(250),
     4                ALR(250), THR(250), CLR(250), CDR(250), ACR(250),
     5                T(250), D(250), ALT(250), V(250), GAM(250),
     6                ALP(250), TH(250), CLL(250), CDD(250), ACL(250),
     7                KDUM(3200)

      COMMON /TOCOMM/ CDMT  ,DMT   ,ALPROT,DELTCL,SWREF ,ARRET ,VROTAT,
     1                OBSTO ,DELTRO,DELVTO,ALMXTO,TIGEAR,CLTOM ,CDMTO , 
     2                CDDP(10), CLDPOC(10), ALPTO(10), CLTO(10),
     3                CDTO(10), IBAL

      COMMON /TOLTH / APA, ANS1, DTCT, SPDSND, THFACT, THREF, THRTO(10),
     1                THRLD(10), VELTO(10), VELLD(10), INTHTO, INTHLD

      DIMENSION IRUN(2)
      DATA RAD /.0174533/

C     CALCULATE PROFILE FROM START OF GROUND ROLL 
C     UNTIL ROTATION SPEED IS REACHED 
  
      G         = 9.80665/.3048
      I         = 1
   10 IM1       = I - 1
      NEOP      = NE - IM1
      DELTAV    = DELVTO 
      IA        = 1
      VE        = 0.0
      DG(IA,I)  = 0.0
      TG(IA,I)  = 0.0
      VG(IA,I)  = 0.0
      CDP       = XINT1( VE,VELTO,10,CDDP ) 
      DCL       = XINT1( VE,VELTO,10,CLDPOC ) / CL 
      CGL(IA,I) = CL + DCL
      CGD(IA,I) = CDG + CDP + CDEOUT*IM1
      STINC     = NEOP * SIN( TINC * RAD )
      CTINC     = NEOP * COS( TINC * RAD )

C     INITIAL THRUST AND ACCELERATION

      THRU      = XINT1( VE,VELTO,10,THRTO )
      THG(IA,I) = NEOP * THRU
      ACO       = (THRU * CTINC - ROLLMU * GROSWT) * G / GROSWT
      ACG(IA,I) = ACO
  
C     INCREMENT VELOCITY UNTIL ROTATION SPEED IS REACHED

   20 V1    = VG(IA,I) + DELTAV
      CDP   = XINT1( V1,VELTO,10,CDDP ) 
      DRAG  = (CDG + CDP + CDEOUT*IM1) * V1 * V1 * RHOA
      THRU  = XINT1( V1,VELTO,10,THRTO )
      DCL   = XINT1( V1,VELTO,10,CLDPOC ) / CL 
      CLIFT = (CL + DCL) * RHOA * V1 * V1 + STINC * THRU
      ACC   = (THRU * CTINC - DRAG - ROLLMU * (GROSWT - CLIFT)) * G /
     1         GROSWT
  
C     TIME AND DISTANCE ARE CALCULATED FOR THE VELOCITY STEP

      DELT      = 2.0  * DELTAV / (ACC + ACO)
      IA        = IA + 1
      IF ( IA .GT. 125 .OR. ACC .LT. 0.) GO TO 30
      TG(IA,I)  = TG(IA-1,I) + DELT
      DG(IA,I)  = DG(IA-1,I) + DELT * 
     1           (VG(IA-1,I) + (2.0 * ACO + ACC) * DELT / 6.0)
      VG(IA,I)  = V1
      CGL(IA,I) = CL + DCL
      CGD(IA,I) = CDG + CDP + CDEOUT*IM1
      THG(IA,I) = NEOP * THRU
      ACG(IA,I) = ACC
      IF ( V1 .GT. VEND .OR. CLIFT .GT. GROSWT ) GO TO 30
      ACO       = ACC
      GO TO 20

C     LOOP BACK TO PICK UP ENGINE OUT TABLES IF APPROPRIATE

   30 IRUN(I) = IA
      I       = I + 1
      IF ( I .EQ. 2 .AND. NE .GT. 1 .AND. IBAL .EQ. 1 ) GO TO 10

      RETURN
      END

CCCCCCCCCCCCCCCCCCCCCCC  SUBROUTINE SEPARATOR  CCCCCCCCCCCCCCCCCCCCCCCCC

      SUBROUTINE CLGRAD ( V2, RHOA, THRU, GROSWT, CG, SG, ALPTO, CLTO,
     1                    CDTO, CDGEAR, CDEOUT, ALPRUN, TINC, RAD, ALP2,
     2                    FORCE2 )

C COMPUTE NET HORIZONTAL FORCE FOR EVALUATION OF CLIMB GRADIENT CRITERIA
C     V2       VELOCITY AT EVALUATION POINT
C     RHOA     DENSITY * WING AREA / 2
C     THRU     THRUST AVAILABLE WITH ONE ENGINE OUT
C     GROSWT   WEIGHT AT EVALUATION POINT
C     CG       COSINE OF REQUIRED FLIGHT PATH ANGLE
C     SG       SINE OF REQUIRED FLIGHT PATH ANGLE
C     ALPTO    ANGLES OF ATTACK FOR AERODYNAMIC TABLES
C     CLTO     LIFT COEFFICIENTS FOR AERODYNAMIC TABLES
C     CDTO     DRAG COEFFICIENTS FOR AERODYNAMIC TABLES
C     CDGEAR   LANDING GEAR DRAG COEFFICIENT
C     CDEOUT   ENGINE OUT DELTA DRAG COEFFICIENT
C     ALPRUN   ANGLE OF ATTACK ON GROUND
C     TINC     THRUST INCIDENCE ON GROUND
C     RAD      CONSTANT TO CONVERT DEGREES TO RADIANS
C     ALP2     ANGLE OF ATTACK - OUTPUT
C     FORCE2   NET FORCE - OUTPUT

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c     ohad 15/7/08
c      IMPLICIT INTEGER*8 (I-N)
      IMPLICIT INTEGER*4 (I-N)

      DIMENSION ALPTO(10), CLTO(10), CDTO(10)

      RHV2   = V2 * V2 * RHOA
      CL     = GROSWT * CG / RHV2
  
C     ITERATE ON ANGLE OF ATTACK UNTIL NET VERTICAL FORCE = 0 
      M      = 0
      ALP2   = XINT1( CL,CLTO,10,ALPTO )
      ALPO   = ALP2
   20 FORCV  = RHV2 * XINT1(ALP2, ALPTO, 10, CLTO) - GROSWT * CG + THRU 
     1         * SIN((ALP2 - ALPRUN + TINC) * RAD)
      M = M + 1
      IF ( ABS(FORCV) .LT. 0.0000001*GROSWT .OR. M .GT. 15 ) GO TO 40 
      IF ( M .GT. 1 ) GO TO 30
      FORO   = FORCV
      ALP2   = ALP2 - .1
      GO TO 20
  
   30 DELTLP = -FORCV * (ALP2 - ALPO) / (FORCV - FORO)
      ALPO   = ALP2
      FORO   = FORCV
      ALP2   = ALP2 + DELTLP
      GO TO 20
  
C     CALCULATE NET HORIZONTAL FORCE (FORCE2 = EXCESS THRUST) 

   40 FORCE2 = -RHV2 * (XINT1(ALP2, ALPTO, 10, CDTO) + CDGEAR + CDEOUT)
     1         - GROSWT * SG + THRU * COS((ALP2 - ALPRUN + TINC) * RAD)
  
      RETURN
      END

CCCCCCCCCCCCCCCCCCCCCCC  SUBROUTINE SEPARATOR  CCCCCCCCCCCCCCCCCCCCCCCCC

      SUBROUTINE ROTCL ( VROT, GROSWT, DLO, TLO, VLO, ALLO, ILO, DOBST,
     1                   TOBST, VOBST, ALOST, GAOST, IOBST )

C  DETERMINE INITIAL VALUE OF ROTATION SPEED BASED ON LIFTOFF SPEED
C  DETERMINE TAKEOFF PROFILE FOR ROTATION AND CLIMBOUT
C     VROT     ROTATION SPEED
C     GROSWT   TAKEOFF GROSS WEIGHT
C     DLO      DISTANCE FROM START OF ROTATION TO LIFTOFF
C     TLO      TIME FROM START OF ROTATION TO LIFTOFF
C     VLO      LIFTOFF VELOCITY
C     ALLO     LIFTOFF ANGLE OF ATTACK
C     ILO      NUMBER OF POINTS IN ROTATION TABLES
C     DOBST    DISTANCE FROM START OF ROTATION TO OBSTACLE
C     TOBST    TIME FROM START OF ROTATION TO OBSTACLE
C     VOBST    OBSTACLE VELOCITY
C     ALOST    OBSTACLE ANGLE OF ATTACK
C     GAOST    OBSTACLE FLIGHT PATH ANGLE
C     IOBST    NUMBER OF POINTS IN CLIMBOUT TABLES

C  COMMON BLOCK ROTDAT
C     VTR      ROTATION SPEED REQUIRED TO MEET LIFTOFF SPEEDS FOR
C              (1) ALL ENGINES OPERATING AND (2) ONE ENGINE OUT
C     ALFROT   MAXIMUM ANGLE OF ATTACK ON THE GROUND
C     ALPMAX   MAXIMUM ANGLE OF ATTACK DURING CLIMBOUT
C     CDGEAR   LANDING GEAR DRAG COEFFICIENT
C     CDEOUT   ENGINE OUT DELTA DRAG COEFFICIENT
C     SPAN     WING SPAN
C     VSTALL   STALL SPEED
C     V005     MAXIMUM OF 1.1 VSTALL AND SPEED REQUIRED FOR 0.5 PERCENT
C              CLIMB GRADIENT FOR FIGHTERS
C     NE       NUMBER OF ENGINES
C     IFAIL    FAILURE SWITCH
C              = 0, NORMAL
C              = 1, UNABLE TO TAKE OFF
C     ICRIT    CRITICAL CONDITION INDICATOR
C              = 0, DETERMINE CRITICAL CONDITION
C              = 1, COMPUTE PROFILE FOR ALL ENGINES OPERATING
C              = 2, COMPUTE PROFILE FOR ONE ENGINE OUT
C     ILAG     INDICATES WHICH IS CRITICAL FOR ROTATION SPEED
C              = 1, VLOF = POWER OFF VMU
C              = 2, VLOF = 1.1 VSTALL
C              = 3, VLOF = SPEED FOR .005 CLIMB GRADIENT

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c     ohad 15/7/08
c      IMPLICIT INTEGER*8 (I-N)
      IMPLICIT INTEGER*4 (I-N)

      COMMON /UNITS / IU5, IU6, IU7, IU8, IU9, IU16, IU17, IU18
      COMMON / FORT / IFITE
      COMMON /BALFLD/ ALPRUN, ARGEF, BRAKMU, CDGRO , CDSPOL, CLSPOL,
     1                RHOA, ROLLMU, TIBRA, TICUT, TINC, TISPA, VANGL,
     2                WHGT, PILOTT, CDEOT, ITIME, ISPOL, IREV

      COMMON /SCRTCH/ TG(125,2), DG(125,2), VG(125,2), THG(125,2),
     1                CGL(125,2),  CGD(125,2), ACG(125,2), TS(125,2),
     2                DS(125,2), VS(125,2), THS(125,2), CSL(125,2),
     3                CSD(125,2), ACS(125,2), TR(250), DR(250), VR(250),
     4                ALR(250), THR(250), CLR(250), CDR(250), ACR(250),
     5                T(250), D(250), ALT(250), V(250), GAM(250),
     6                ALP(250), TH(250), CLL(250), CDD(250), ACL(250),
     7                KDUM(3200)

      COMMON /TOCOMM/ CDMT  ,DMT   ,ALPROT,DELTCL,SWREF ,ARRET ,VROTAT,
     1                OBSTO ,DELTRO,DELVTO,ALMXTO,TIGEAR,CLTOM ,CDMTO , 
     2                CDDP(10), CLDPOC(10), ALPTO(10), CLTO(10),
     3                CDTO(10), IBAL

      COMMON /TOLTH / APA, ANS1, DTCT, SPDSND, THFACT, THREF, THRTO(10),
     1                THRLD(10), VELTO(10), VELLD(10), INTHTO, INTHLD

      COMMON /ROTDAT/ VTR(2), ALFROT, ALPMAX, CDGEAR, CDEOUT, SPAN,
     1                VSTALL, V005, NE, IFAIL, ICRIT, ILAG

      DIMENSION VIT(10), ALWR(10), HFOR(10), DELFOR(10)
      DATA G /32.174/, RAD /0.0174533/

C     IS ROTATION VELOCITY (VROT) GIVEN OR TO BE FOUND

      SPD  = 1852./(.3048*3600.)
      IM1  = ICRIT - 1
      VMIN = VROT
      IF ( ICRIT .GT. 0 ) GO TO 30

C     FIND VROT = MAX OF ROTATION SPEEDS WHICH PRODUCE LIFT OFF SPEEDS
C     FOR TRANSPORTS OF 1.10*VMU(1) OR 1.05*VMU(2)
C     WHERE 1 = ALL ENGINES OPERATING, 2 = ONE ENGINE OUT
C     FOR FIGHTERS, THE LIFT OFF SPEED IS THE MAXIMUM OF (1) POWER-OFF
C     VMU, (2) 1.1 VSTALL, AND (3) THE SPEED REQUIRED TO MAINTAIN A
C     CLIMB GRADIENT OF .005 WITH ONE ENGINE OUT

      I    = 1
    5 IM1  = I - 1
      M    = 1
      DWO  = 0.

C     CALCULATE VMU - ASSUME IT IS LIFTOFF SPEED AT ALPHA MAX ON GROUND

      ALPH1  = ALFROT 
      DELTLP = ALPH1 - ALPRUN
      STHR   = SIN( (TINC + DELTLP) * RAD )
      V1     = 1.1 * VSTALL * SPD


c     ohad 16/7/08 - 0.0d0 rather than 0.
c      CALL GEFECT ( ALPH1, 0., 0., ALPTO, CLTO, CDTO, CDMTO, CL, CDG, 
c     1              ARRET*ARGEF, WHGT, SPAN )
      CALL GEFECT ( ALPH1, 0.0d0, 0.0d0, ALPTO, CLTO, CDTO, CDMTO, CL, 
     1             CDG,  ARRET*ARGEF, WHGT, SPAN )
  
C     ITERATE TO FIND LIFTOFF VELOCITY

   10 THRU   = 0.
      IF ( IFITE .EQ. 0 ) THRU = XINT1( V1,VELTO,10,THRTO ) 
      CLP    = XINT1( V1,VELTO,10,CLDPOC )
      DCL    = CLP / CL
      VTHR   = (NE - IM1) * STHR * THRU
      CLROS  = (CL + DCL) * RHOA
      CLIFT  = CLROS * V1 ** 2 + VTHR
      DELW   = GROSWT - CLIFT
      IF ( ABS(DELW/GROSWT) .LT. .00001 .OR. M .GT. 10 ) GO TO 20
      DELTAV = SQRT((GROSWT - VTHR)/CLROS) - V1
      IF ( M .GT. 1 .AND. ABS(DELW-DWO) .GT. .0001 )
     1         DELTAV = DELW * (V1 - VO) / (DWO - DELW)
      IF ( ABS(DELTAV) .GT. V1/2. ) DELTAV = SIGN( V1/2., DELTAV)
      DWO    = DELW
      VO     = V1
      V1     = V1 + DELTAV
      M      = M + 1
      GO TO 10
  
C     CALCULATE PROFILE FROM START OF ROTATION UNTIL LIFTOFF
  
   20 IF ( IFITE .EQ. 1 ) THEN
         IF ( V005 .LT. V1 ) THEN
            ILAG  = 1
            VTARG = V1
         ELSE
            VTARG = V005
         ENDIF
      ELSE
         VTARG = V1 * (1.15 - .05 * I)
      ENDIF
      V1O   = 0.
      NV    = 0
   30 VE    = VROT
      DE    = 0.
      TI    = 0.
      IA    = 0
      ALPOL = ALPRUN
      DELT  = DELTRO
      ALPH1 = ALPRUN
      DELF  = 1.0
      ACO   = 0.0
      DACC  = 0.0
      IFIR  = 1
      IL    = 0
      IF ( ICRIT .GT. NE ) ICRIT = 1
      GO TO 50
  
C     ROTATE AT SPECIFIED RATE (VANGLE) AND
C     ESTIMATE VELOCITY AT THE END OF THE TIME STEP 

   40 DELTAL = VANGL * DELT
      ALPH1  = ALPH1 + DELTAL
      M = 0
   50 DELTAV = DELT * (2.*ACO + DACC*DELT) / 2.
      IF ( ALPH1 .GT. ALFROT ) ALPH1 = ALFROT 

c     ohad 16/7/08 - 0.0d0 rather than 0.
c      CALL GEFECT ( ALPH1,0.0,0.0,ALPTO,CLTO,CDTO,CDMTO,CL,CDG,
c     1              ARRET*ARGEF,WHGT,SPAN )
      CALL GEFECT ( ALPH1,0.0d0,0.0d0,ALPTO,CLTO,CDTO,CDMTO,CL,CDG,
     1              ARRET*ARGEF,WHGT,SPAN )
  
C     LOOP TO CONVERGE VELOCITY AT THE END OF THE TIME STEP 
C     COMPUTE VERTICAL LIFT AND HORIZONTAL ACCELERATION

   60 V1     = VE + DELTAV
      CDP    = XINT1( V1,VELTO,10,CDDP )
      DRAG   = (CDG + CDGEAR + CDP + CDEOUT*IM1) * RHOA * V1 ** 2
      THRU   = XINT1( V1,VELTO,10,THRTO ) 
      CLP    = XINT1( V1,VELTO,10,CLDPOC )
      DCL    = CLP / CL
      DELTLP = ALPH1 - ALPRUN
      CLIFT  = (CL + DCL) * RHOA * V1 ** 2 + (NE - IM1) * SIN( (TINC +
     1          DELTLP) * RAD ) * THRU
      FRICT  = ROLLMU * (GROSWT - CLIFT)
      IF ( FRICT .LT. 0.0 ) FRICT = 0.0
      TNET   = THRU * (NE - IM1) * COS( (TINC + DELTLP) * RAD )
      FORC   = TNET - DRAG - FRICT
      ACC    = FORC * G / GROSWT
      IF ( ACC+ACO .LE. 0. ) THEN
         IFAIL = 2
         RETURN
      ENDIF

C     IF THIS IS THE FIRST PASS FOR A NEW VROT, JUST ESTABLISH ACO

      IF ( IFIR .EQ. 0 ) GO TO 70
      IFIR   = 0
      ACO    = ACC
      GO TO 40

   70 DVO    = DELTAV
      IF ( DELT .GT. 0. ) DACC = (ACC - ACO) / DELT
      DELTAV = DELT * (ACO + ACC) / 2.
      IF ( IL .GT. 0 ) GO TO 80
      M      = M + 1
      IF ( ABS(DELTAV-DVO) .GT. .001 .AND. M .LT. 10 ) GO TO 60

      IF ( CLIFT .GT. GROSWT ) GO TO 80
      TI     = TI + DELT
      DE     = DE + DELT * (VE + (2. * ACO + ACC) * DELT / 6.)
      VE     = VE + DELTAV
      DELF   = CLIFT - GROSWT
      ACO    = ACC
      ALPOL  = ALPH1
      IA     = IA + 1
      IF ( IA .GT. 250 ) GO TO 340
      TR(IA)  = TI
      DR(IA)  = DE
      VR(IA)  = VE
      ALR(IA) = ALPH1
      THR(IA) = THRU * (NE - IM1)
      CLR(IA) = CL + DCL
      CDR(IA) = CDG + CDGEAR + CDP + CDEOUT*IM1
      ACR(IA) = ACC
      ILO     = IA
      GO TO 40

C     ITERATE UNTIL TIME OF LIFTOFF IS DETERMINED 
   80 IL = IL + 1
      VIT(IL)    = DELT
      DELFOR(IL) = CLIFT - GROSWT
      ALWR(IL)   = ALPH1
      HFOR(IL)   = FORC
  
C     IF THE NET FORCE = 0, LIFTOFF HAS OCCURRED
      IF ( ABS( DELFOR(IL) ) .LT. 0.00001 * GROSWT ) GO TO 120
      IF ( IL .GT. 1 ) GO TO 90
C     FIRST ITERATION 
      DELT   = DELT * (1. - DELFOR(IL) / (DELFOR(IL) - DELF))
      IF ( DELT .LT. 0.0 ) DELT = 0.0
      GO TO 100
  
C     SUBSEQUENT ITERATIONS - LINEAR INTERPOLATION
   90 IF ( IL .GE. 10 ) GO TO 110
      DELT   = VIT(IL) - (VIT(IL) - VIT(IL-1)) * DELFOR(IL) / 
     1                   (DELFOR(IL) - DELFOR(IL-1)) 
      IF ( DELT .LE. 0.0 ) DELT = VIT(IL) / 2.0
      IF ( DELT .LE. 0.0 ) GO TO 120
      CHECK = DELFOR(IL)*DELFOR(IL-1)
C     TRY INTERVAL HALVING
      IF( IL.GT.5 .AND. CHECK.LT.0. ) DELT = (VIT(IL)+VIT(IL-1))/2.0
  100 ALPH1 = ALPOL
      GO TO 40
  110 IF ( ABS( VIT(IL) - VIT(IL-1) ) .LT. 0.001 ) GO TO 120
C     NO CONVERGENCE - PRINT DIAGNOSTIC DATA
      WRITE(IU6, 350) (IL, VIT(IL), DELFOR(IL), ALWR(IL), HFOR(IL),
     1                 IL = 1,10)
  
C     LIFTOFF SPEED HAS BEEN FOUND, ITERATE TO MATCH TARGET

  120 IF ( ICRIT .GT. 0 ) GO TO 140
      NV     = NV + 1  
      IF ( NV .EQ. 1 .AND. V1 .GE. VTARG ) GO TO 130
      DELVR  = V1 - VTARG
      IF ( ABS(DELVR) .LT. .001 .OR. NV .GT. 10 ) GO TO 130
      DELV1  = V1 - V1O
      IF ( NV .GT. 1 .AND. ABS(DELV1) .GT. .001 )
     1         DELVR = (VROT-VRO) * DELVR / DELV1
      VRO    = VROT
      V1O    = V1
      VROT   = VROT - DELVR
      GO TO 30

C     ROTATION SPEED FOR THE TARGET LIFTOFF SPEED HAS BEEN FOUND

  130 VTR(I) = VROT
      I      = I + 1
      IF ( I .LE. 2 .AND. NE .GT. 1 .AND. IBAL .EQ. 1 ) GO TO 5

      ICRIT  = 1
      IF ( VTR(2) .GT. VTR(1) ) ICRIT = 2
      VRCRIT = VTR(ICRIT)


      IF ( ICRIT .EQ. 2 .OR. NE .EQ. 1 .OR. IBAL .EQ. 0 ) GO TO 140
      I      = 2
      IM1    = 1
      VROT   = VRCRIT
      IF ( VROT .LT. VMIN ) VROT = VMIN
      GO TO 30

  140 DELTAV  = (ACC + ACO) * DELT / 2.0
      ALLO    = ALPH1
      TLO     = TI + DELT
      DLO     = DE + DELT * (VE + (2. * ACO + ACC) * DELT / 6.)
      VLO     = VE + DELTAV
      ACO     = ACC
      IA      = IA + 1
      IF ( IA .GT. 250 ) GO TO 340
      TR(IA)  = TLO
      DR(IA)  = DLO
      VR(IA)  = VLO
      ALR(IA) = ALPH1
      THR(IA) = THRU * (NE - IM1)
      CLR(IA) = CL + DCL
      CDR(IA) = CDG + CDGEAR + CDP + CDEOUT*IM1
      ACR(IA) = ACC
      ILO     = IA
  
C     COMPUTE TRAJECTORY FROM LIFTOFF UNTIL OBSTACLE HEIGHT IS REACHED 
  
      VVERT  = 0.0
      VHORZ  = VLO
      TI     = TLO
      IA     = 0
      DE     = DLO
      GAMO   = 0.0
      DELO   = 0.0
      HOO    = 0.0
      ACHO   = ACO
      ACVO   = 0.0
      DACV   = 0.0
      DGAM   = 0.0
      MAL    = 0
      IL     = 0
      HT     = 0.0
      DELT   = DELTCL
      GAMFLT = 0.0
  
C     INCREMENT TIME UNTIL ALTITUDE EXCEEDS OBSTACLE HEIGHT 

  230 DELTAV = DELT * (2.*ACO + DACC*DELT) / 2.
      IF ( DELTAV .LT. 0. ) DELTAV = 0.
      DELTAL = VANGL * DELT
      ALPOL  = ALPH1
      M      = 0

C     CONTINUE ROTATION LIMITED BY ALPMAX 
      ALPH1  = ALPH1 + DELTAL
  240 IF ( ALPH1 .GT. ALPMAX ) ALPH1 = ALPMAX
      GAMFLT = GAMO + DELT * DGAM
      DELTLP = ALPH1 - ALPRUN
      HO     = HT + DELT * (VVERT + DELT * (3.*ACVO + DELT*DACV) / 6. )
      CALL GEFECT ( ALPH1, HO, GAMFLT, ALPTO, CLTO, CDTO, CDMTO, CL,
     1              CDG, ARRET*ARGEF, WHGT, SPAN )
      V1     = VE + DELTAV
  
C     INCLUDE GEAR DRAG IF IT IS STILL DOWN 
      CDGR   = 0.0
      IF ( (TI + DELT - TLO) .LE. TIGEAR .AND. TIGEAR .GT. 0. )
     1  CDGR = CDGEAR * COS(((TI+DELT-TLO) / TIGEAR) * 90. * RAD )
      CDP    = XINT1( V1,VELTO,10,CDDP )
      DRAG   = (CDG + CDGR + CDP + CDEOUT*IM1) * V1 ** 2 * RHOA
      CLP    = XINT1(V1,VELTO,10,CLDPOC)
      DCL    = CLP / CL
      CLIFT  = (CL + DCL) * V1 ** 2 * RHOA
      THRU   = XINT1( V1,VELTO,10,THRTO ) 
      CG     = COS( GAMFLT * RAD )
      SG     = SIN( GAMFLT * RAD )
      TNETH  = THRU * (NE - IM1) * COS( (TINC + DELTLP + GAMFLT) * RAD )
      TNETV  = THRU * (NE - IM1) * SIN( (TINC + DELTLP + GAMFLT) * RAD )
      FORCH  = TNETH - CLIFT * SG - DRAG * CG
      FORCV  = TNETV + CLIFT * CG - GROSWT - DRAG * SG
      ACCH   = FORCH * G / GROSWT
      ACCV   = FORCV * G / GROSWT
      DACV   = (ACCV - ACVO) / DELT
      HO     = HT + DELT * (VVERT + DELT * (2.0 * ACVO + ACCV) / 6.0 )
      TVERT  = VVERT + DELT * (ACVO + ACCV) / 2.0
      THORZ  = VHORZ + DELT * (ACHO + ACCH) / 2.0
      TV     = SQRT(TVERT**2 + THORZ**2)
      GAMFLT = ATAN(TVERT / THORZ) / RAD
      DGAM   = (GAMFLT - GAMO) / DELT
      ACC    = (ACCH * THORZ + ACCV * TVERT ) / TV
      DELTAV = TV - VE
      M      = M + 1
      IF ( M   .EQ. 1  ) GO TO 240
      IF ( MAL .GT. 0  ) GO TO 280
      IF ( ACC .GE. 0. ) GO TO 300 
  
C     IF FLIGHT PATH ACCELERATION IS NEGATIVE, REDUCE ALPHA 
C     AND ITERATE UNTIL ACCELERATION IS ZERO

      DAL    = -0.1
  270 MAL    = MAL + 1
      ALPO   = ALPH1
      ACACO  = ACC 
      ALPH1  = ALPH1 + DAL
      DELTAV = DELT * ACO / 2.
      M      = 0
      GO TO 240
  280 IF ( ABS(ACC) .GT. 0.001 .AND. MAL .LT. 10 .AND. ACC .NE. ACACO ) 
     1  GO TO 290 
      MAL    = 0
      GO TO 300
  290 DAL    = -ACC * (ALPH1 - ALPO) / (ACC - ACACO)
      GO TO 270
  300 IF ( ABS(HO - OBSTO) .LT. 0.01 ) GO TO 320
      IF ( IL .GT. 0 ) GO TO 310 
      IF ( HO .LT. OBSTO ) GO TO 330
  
C     IF HEIGHT EXCEEDS OBSTACLE, ITERATE UNTIL EQUAL 
  310 DV     = (DELT - DELO) * (HO - OBSTO) / (HO - HOO)
      DELO   = DELT
      HOO    = HO
      DELT   = DELT - DV
      IF ( DELT .LT. 0.0    ) DELT = DELO / 2.0
      IF ( DELT .GT. DELTCL ) DELT = (DELTCL + DELO) / 2.0
      ALPH1  = ALPOL
      IL     = IL + 1
      IF ( IL .LT. 10 ) GO TO 230
  320 IL     = 10
  
  330 CONTINUE
      HT      = HO
      HOO     = HT
      DE      = DE + DELT * (VHORZ + (2.0 * ACHO + ACCH) * DELT / 6.0)
      VVERT   = TVERT
      VHORZ   = THORZ
      VE      = TV
      GAMO    = GAMFLT
      ACO     = ACC 
      ACHO    = ACCH
      ACVO    = ACCV
      TI      = TI + DELT
      IA      = IA + 1
      IF ( IA .GT. 250 ) GO TO 340
      T(IA)   = TI
      D(IA)   = DE
      V(IA)   = VE
      ALP(IA) = ALPH1
      TH(IA)  = THRU * (NE - IM1)
      CLL(IA) = CL + DCL
      CDD(IA) = CDG + CDGR + CDP + CDEOUT*IM1
      ALT(IA) = HT
      GAM(IA) = GAMFLT
      ACL(IA) = ACC
      IOBST   = IA
      IF ( IL .LT. 10 ) GO TO 230
  
C     FINISHED, OBSTACLE HAS BEEN REACHED
  
  335 TOBST  = TI
      VOBST  = VE / SPD
      DOBST  = DE
      ALOST  = ALPH1
      GAOST  = GAMFLT
      RETURN

  340 IFAIL  = 1
      IF ( ICRIT .EQ. 0 ) ICRIT = 2
      GO TO 335

  350 FORMAT (54H   * * ITERATION OF LIFTOFF VELOCITY IS INCOMPLETE * */
     1(I5,6H DELT=,F7.3,8H DELFOR=,F10.2,7H ALPHA=,F7.3,6H HFOR=,F9.2))

      END

CCCCCCCCCCCCCCCCCCCCCCC  SUBROUTINE SEPARATOR  CCCCCCCCCCCCCCCCCCCCCCCCC

      SUBROUTINE DECEL ( VEND, NE, GROSWT, CDG, CL, ISTP )

C  COMPUTES DECELERATION GROUND RUN TABLES FOR ABORTED TAKEOFF AND OUTPUT
C     VEND     ENDING VELOCITY FOR TABLES
C     NE       NUMBER OF ENGINES
C     GROSWT   TAKEOFF GROSS WEIGHT
C     CDG      DRAG COEFFICIENT
C     CL       LIFT COEFFICIENT
C     ISTP(1)  NUMBER OF ENTRIES IN TABLE - ALL ENGINES OPERATING 
C     ISTP(2)  NUMBER OF ENTRIES IN TABLE - ONE ENGINE OUT 

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c     ohad 15/7/08
c      IMPLICIT INTEGER*8 (I-N)
      IMPLICIT INTEGER*4 (I-N)

      COMMON /BALFLD/ ALPRUN, ARGEF, BRAKMU, CDGRO , CDSPOL, CLSPOL,
     1                RHOA, ROLLMU, TIBRA, TICUT, TINC, TISPA, VANGL,
     2                WHGT, PILOTT, CDEOT, ITIME, ISPOL, IREV 

      COMMON /SCRTCH/ TG(125,2), DG(125,2), VG(125,2), THG(125,2),
     1                CGL(125,2),  CGD(125,2), ACG(125,2), TS(125,2),
     2                DS(125,2), VS(125,2), THS(125,2), CSL(125,2),
     3                CSD(125,2), ACS(125,2), TR(250), DR(250), VR(250),
     4                ALR(250), THR(250), CLR(250), CDR(250), ACR(250),
     5                T(250), D(250), ALT(250), V(250), GAM(250),
     6                ALP(250), TH(250), CLL(250), CDD(250), ACL(250),
     7                KDUM(3200)

      COMMON /TOCOMM/ CDMT  ,DMT   ,ALPROT,DELTCL,SWREF ,ARRET ,VROTAT,
     1                OBSTO ,DELTRO,DELVTO,ALMXTO,TIGEAR,CLTOM ,CDMTO , 
     2                CDDP(10), CLDPOC(10), ALPTO(10), CLTO(10),
     3                CDTO(10), IBAL

      COMMON /TOLTH / APA, ANS1, DTCT, SPDSND, THFACT, THREF, THRTO(10),
     1                THRLD(10), VELTO(10), VELLD(10), INTHTO, INTHLD

      COMMON /TREVRS/ RVFACT, TIRVRS, TIRVA, REVCUT, CLREV, CDREV,
     1                VELRV(10), THRRV(10), INTHRV
  
      DIMENSION ISTP(2)
      DATA      RAD /.0174533/

C     CALCULATE PROFILE FROM STOP BACKWARDS TO BRAKE APPLICATION POINT
  
      G     = 9.80665/.3048
      I     = 1
      CLAB  = CL  + ISPOL * CLSPOL
      CDAB  = CDG + ISPOL * CDSPOL
   10 IM1   = I - 1
      NEOP  = NE - IM1
      IAPRV = 0
      DCLR  = 0.
      DCDR  = 0.
      VE    = 0.
      THRU  = XINT1( VE,VELLD,10,THRLD )
      IF ( IREV-IM1 .GT. 0 ) THEN
         IAPRV = 1
         IF ( REVCUT .LE. 0. ) THEN
            DCLR = CLREV
            DCDR = CDREV
            THRU = XINT1( VE,VELRV,10,THRRV ) * RVFACT
         ENDIF
      ENDIF
      DELTAV    = DELVTO 
      IA        = 1
      DS(IA,I)  = 0.0
      TS(IA,I)  = 0.0
      VS(IA,I)  = 0.0
      CSL(IA,I) = CLAB + DCLR
      CSD(IA,I) = CDAB + DCDR
      STINC     = NEOP * SIN( TINC * RAD )
      CTINC     = NEOP * COS( TINC * RAD )

C     FINAL THRUST AND ACCELERATION

      THS(IA,I) = NEOP * THRU
      ACO       = - (THRU * CTINC - BRAKMU * GROSWT) * G / GROSWT
      ACS(IA,I) = - ACO
  
C     INCREMENT VELOCITY UNTIL DESIRED SPEED IS REACHED

   20 V1    = VS(IA,I) + DELTAV
      THRU  = XINT1( V1,VELLD,10,THRLD )
      IF ( IAPRV .EQ. 1 .AND. (V1+DELTAV) .GE. REVCUT ) THEN
         CFACT = 1.
         IF ( V1 .LT. REVCUT ) CFACT = (V1 + DELTAV - REVCUT)/DELTAV
         THRU = XINT1(V1,VELRV,10,THRRV)*RVFACT*CFACT + THRU*(1.-CFACT)
         DCLR = CLREV * CFACT
         DCDR = CDREV * CFACT
      ENDIF
      CLIFT = (CLAB+DCLR) * V1*V1*RHOA + STINC*THRU
      DRAG  = (CDAB+DCDR) * V1*V1*RHOA
      ACC   = - (THRU*CTINC - DRAG - BRAKMU*(GROSWT-CLIFT)) * G/GROSWT
  
C     TIME AND DISTANCE ARE CALCULATED FOR THE VELOCITY STEP

      DELT      = 2.0  * DELTAV / (ACC + ACO)
      IA        = IA + 1
      IF ( IA .GT. 125 .OR. ACC .LT. 0.) GO TO 30
      TS(IA,I)  = TS(IA-1,I) + DELT
      DS(IA,I)  = DS(IA-1,I) + DELT * 
     1           (VS(IA-1,I) + (2.0 * ACO + ACC) * DELT / 6.0)
      VS(IA,I)  = V1
      CSL(IA,I) = CLAB
      CSD(IA,I) = CDAB
      THS(IA,I) = NEOP * THRU
      ACS(IA,I) = - ACC
      IF ( V1 .GT. VEND .OR. CLIFT .GT. GROSWT ) GO TO 30
      ACO       = ACC
      GO TO 20

C     LOOP BACK TO PICK UP ENGINE OUT TABLES IF APPROPRIATE

   30 ISTP(I) = IA
      I       = I + 1
      IF ( I .EQ. 2 .AND. NE .GT. 1 .AND. IBAL .EQ. 1 ) GO TO 10

      RETURN
      END

CCCCCCCCCCCCCCCCCCCCCCC  SUBROUTINE SEPARATOR  CCCCCCCCCCCCCCCCCCCCCCCCC

      SUBROUTINE GEFECT ( ALPHA, H, GAM, ATB, CLT, CDT, CDM, CL, CDG,
     1                    AR, WHGT, SPAN )
  
C IMPLEMENTATION OF THE JOHN DEYOUNG GROUND EFFECTS EQUATIONS 

C     ALPHA = ANGLE OF ATTACK 
C     H     = ALTITUDE
C     GAM   = FLIGHT PATH ANGLE 
C     ATB   = ANGLE OF ATTACK TABLES
C     CLT   = LIFT COEFFICIENT TABLES 
C     CDT   = DRAG COEFFICIENT TABLES 
C     CDM   = MINIMUM DRAG COEFFICIENT
C     CL    = LIFT COEFFICIENT IN GROUND EFFECT 
C     CDG   = DRAG COEFFICIENT IN GROUND EFFECT 
C     AR    = WING ASPECT RATIO 
C     WHGT  = WING HEIGHT ABOVE GROUND AT ZERO ALTITUDE 
C     SPAN  = WING SPAN 

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c     ohad 15/7/08
c      IMPLICIT INTEGER*8 (I-N)
      IMPLICIT INTEGER*4 (I-N)
  
      COMMON /GEFSW / INCGEF
      DIMENSION ATB(10),CLT(10),CDT(10)
  
      CL  = XINT1( ALPHA,ATB,10,CLT ) 
      CDG = XINT1( ALPHA,ATB,10,CDT ) 
      IF ( INCGEF .LE. 0 ) RETURN
      HF  = (H + WHGT) / SPAN
  
C  CHECK FOR OUT OF GROUND EFFECT
  
      IF ( HF .GE. 1.1 ) RETURN

C  10 PERCENT RAMP TO PREVENT DISCONTINUITY IN GROUND EFFECTS

      HFACT = 1.0
      IF ( HF .GT. 1.0 ) HFACT = 10. * (1.1 - HF)
  
C  PREVENT RIDICULOUS VALUES IF HF IS NEGATIVE
  
      IF (HF .LT. 0.0) HF = 0.0
      A      = (6 + AR) ** 2 / (36.0 + AR)
      B      = 32.0 * (HF * A) ** 2 + 1.0
      D      = (ALPHA + GAM) * 0.0174533
      DENOM  = B - 0.5 + 4.0 * HF * A * SQRT(B)
      CLFACT = 1.0 + HFACT / DENOM
      B      = 1. + 32.0 * HF ** 2
      DENOM  = 4.0 * HF * SQRT(B) + B
      PHII   = 1.0 - HFACT / DENOM
      CDG    = CDM + CLFACT * PHII * (CDG-CDM) + D * CL * (CLFACT-1.)
      CL     = CL * CLFACT

      RETURN
      END

CCCCCCCCCCCCCCCCCCCCCCC  SUBROUTINE SEPARATOR  CCCCCCCCCCCCCCCCCCCCCCCCC

      SUBROUTINE LNDING ( FDLNGT, GROSWT, IFLAG, ARN, SW, GLOV,
     1                    NENG, FORCE2, APRVEL )
  
C EVALUATE ENGINE-OUT MISSED APPROACH CLIMB GRADIENT CONSTRAINT 
C COMPUTE LANDING PROFILE AND FIELD LENGTH
C     FDLNGT = LANDING FIELD LENGTH 
C     GROSWT = LANDING GROSS WEIGHT 
C     IFLAG  = PRINT SWITCH 
C     ARN,SW,GLOV = CURRENT ASPECT RATIO, WING AREA, AND GLOVE AREA 
C     NENG   = NUMBER OF ENGINES
C     FORCE2 = THRUST SURPLUS AFTER MEETING MISSED APPROACH CLIMB 
C              GRADIENT (IF NEGATIVE, DELTA THRUST REQUIRED)
C     APRVEL = APPROACH VELOCITY - OUTPUT 

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c     ohad 15/7/08
c      IMPLICIT INTEGER*8 (I-N)
      IMPLICIT INTEGER*4 (I-N)
  
      COMMON /UNITS / IU5, IU6, IU7, IU8, IU9, IU16, IU17, IU18
      COMMON /BALFLD/ ALPRUN, ARGEF, BRAKMU, CDGRO, CDSPOL, CLSPOL,
     1                RHOA, ROLLMU, TIBRA, TICUT, TINC, TISPA, VANGL,
     2                WHGT, PILOTT, CDEOT, ITIME, ISPOL, IREV 
      COMMON / LAND / ALMXLD,APRANG,CLLDM ,TISPOL,TIBRAK,CDMW  ,DMO   , 
     1                ACCLIM,DELTRN,OBSLD ,DELHAP,DELDFL,CDMLD ,APRHGT, 
     2                SWING, AR, THDRY, CLLD(10), CDLD(10), ALPLD(10),
     3                MAGRUP
      COMMON /SCRTCH/ T(300), D(300), ALT(300), V(300), EM(300),
     1                GAM(300), ALP(300), TANG(300), TH(300), CLL(300), 
     2                CDD(300), ELOD(300), ACN(10), ALPHE(10),
     3                DELFOR(10), H(10), HLAND(10), VIT(10), ALWR(10),
     4                HFOR(10), SDUM(4320), KDUM(3200)
      COMMON /TOLTH / APA, ANS1, DTCT, SPDSND, THFACT, THREF, THRTO(10),
     1                THRLD(10), VELTO(10), VELLD(10), INTHTO, INTHLD
      COMMON /TREVRS/ RVFACT, TIRVRS, TIRVA, REVCUT, CLREV, CDREV,
     1                VELRV(10), THRRV(10), INTHRV 
      COMMON /OBSDAT/ VOBST, AOBST, THOBST
      COMMON / FORT / IFITE
 
C SCALE AERODYNAMIC DRAG ASSUMING PARABOLIC POLAR 
C INITIALIZE CONSTANTS AND CONFIGURATION DATA 
  
      SPAN   = SQRT(ARN * (SW - GLOV))
      CDM    = CDMW + DMO / SW
      ZERO   = 0.
      DO 1 I = 1,10
      CDLD(I) = (CDLD(I) - CDMLD) * AR / ARN + CDM 
    1 CONTINUE
      CDGEAR = CDGRO / SW
      CDEOUT = CDEOT / SW
      CDMLD  = CDM
      SWING  = SW
      AR     = ARN
      FARFCT = 0.6 + 0.4*IFITE
      G      = 32.174
      FTOL   = -.000001*GROSWT
      ISTOP  = 0
      ALPMIN = ALPLD(1) - 3.0 
      CUTBK  = 1.0
      THM1   = 0.0
      TIBR   = TIBRAK
      TISP   = TISPOL
      TIRV   = TIRVRS
      RAD    = 0.0174533
      SPD    = 1852. / 0.3048 / 3600.0
      NE     = NENG
      CLMAX  = CLLDM
      ALCLM  = XINT1( CLMAX/1.69, CLLD, 10, ALPLD )
      IF ( ALCLM .GT. ALMXLD )
     1     CLMAX = 1.69 * XINT1 ( ALMXLD, ALPLD, 10, CLLD )

C     PRINT CURRENT DRAG POLAR AND THRUST SCHEDULES

      IF ( IFLAG .LE. 0 ) GO TO 10
      IF ( IFLAG .NE. 5 ) WRITE(IU6, 5)
    5 FORMAT ('1')
      WRITE(IU6, 610)
      WRITE(IU6, 430)
      WRITE(IU6, 440) (ALPLD(I), I = 1,10) 
      WRITE(IU6, 450) (CLLD(I),  I = 1,10)
      WRITE(IU6, 460) (CDLD(I),  I = 1,10)
      WRITE(IU6, 470) CDMLD, CDGEAR, CDEOUT, CLLDM, GROSWT 
      IF ( CLMAX .LT. CLLDM ) WRITE(IU6,475 ) CLMAX, ALMXLD
      WRITE(IU6, 480)
      WRITE(IU6, 500) (VELLD(I), I = 1,10) 
      WRITE(IU6, 510) (THRLD(I), I = 1,10) 
      IF ( RVFACT .EQ. 0.0 ) GO TO 10
      WRITE(IU6, 490)
      WRITE(IU6, 500) (VELRV(I), I = 1,10)
      WRITE(IU6, 510) (THRRV(I), I = 1,10)

   10 RHOA   = ANS1 * SWING / 2.0
      VSTALL = SQRT( GROSWT / (CLMAX * RHOA) ) / SPD
      APRVEL = (1.3 - .1*IFITE) * VSTALL
      V2     = APRVEL * SPD

C     CALCULATE VMU - ASSUME IT IS LIFTOFF SPEED AT ALPHA MAX ON GROUND
C     CONSTRAIN HORIZONTAL SPEED UNTIL TOUCHDOWN TO BE .GE. 1.05 VMU

      ALPH1  = ALMXLD 
      DELTLP = ALPH1 - ALPRUN
      STHR   = SIN( (TINC + DELTLP) * RAD )
      CGAM   = COS( APRANG * RAD )
      VMUM   = 1.1 * VSTALL * SPD
      VMU    = VMUM
      DWO    = 0.0
      M      = 1
c     ohad 16/7/08 - 0.0d0 rather than 0.
c      CALL GEFECT ( ALPH1, 0., 0., ALPLD, CLLD, CDLD, CDMLD, CL, CDG, 
c     1              AR*ARGEF, WHGT, SPAN )
      CALL GEFECT ( ALPH1, 0.0d0, 0.0d0, ALPLD, CLLD, CDLD, CDMLD, CL, 
     1            CDG,   AR*ARGEF, WHGT, SPAN )
  
C     ITERATE TO FIND LIFTOFF VELOCITY

   15 THRU   = XINT1( VMU, VELLD, 10, THRLD ) 
      IF ( IFITE .EQ. 1 .AND. THRU .GT. 0. ) THRU = 0.
      VTHR   = NE * STHR * THRU
      CLROS  = CL * RHOA
      CLIFT  = CLROS * VMU ** 2 + VTHR
      DELW   = GROSWT - CLIFT
      IF ( ABS(DELW/GROSWT) .LT. .00001 .OR. M .GT. 10 ) GO TO 17
      DELTAV = SQRT((GROSWT - VTHR)/CLROS) - VMU
      IF ( M .GT. 1 .AND. ABS(DELW-DWO) .GT. .0001 )
     1 DELTAV = DELW * (VMU - VMO) / (DWO - DELW)
      DWO    = DELW
      VMO    = VMU
      VMU    = VMU + DELTAV
      M      = M + 1
      GO TO 15

   17 IF ( IFITE .EQ. 1 ) THEN
         IF ( VMU .LT. VMUM ) VMU = VMUM
      ELSE
         VMU = 1.05 * VMU
      ENDIF
      IF ( V2 .LT. VMU/CGAM ) V2 = VMU/CGAM
  
C     MISSED APPROACH CLIMB GRADIENT CALCULATIONS - ONE ENGINE OUT
  
      IF ( NE .EQ. 1 ) GO TO 50
  
C     CALCULATE REQUIRED CLIMB GRADIENT 
      GAM2 = ATAN( 0.015 + 0.003 * NE )
      IF ( IFITE .EQ. 1 ) GAM2 = 0.025
      SG   = SIN ( GAM2 )
      CG   = COS ( GAM2 )
      IRR  = 0

C     DETERMINE NET THRUST IF CLIMB GRADIENT IS MET
   20 NEOP = NE - 1
      IF ( NE .EQ. 1 ) NEOP = 1
      CDGR = CDGEAR
      IF ( MAGRUP .EQ. 1 ) CDGR = 0.
      IF ( IFITE .EQ. 1 .AND. THDRY .GT. 0. ) THEN
         THRU = THDRY * NEOP
      ELSE
         THRU = XINT1( V2,VELTO,10,THRTO ) * NEOP
      ENDIF
      CALL CLGRAD ( V2, RHOA, THRU, GROSWT, CG, SG, ALPLD, CLLD, CDLD,
     1              CDGR, CDEOUT, ALPRUN, TINC, RAD, ALP2, FORCE2 )

      IF ( IRR .GT. 1 ) GO TO 30
      IF ( FORCE2 .GE. FTOL ) GO TO 50

C     MISSED APPROACH CLIMB GRADIENT CRITERION FAILED
C     INCREASE V2 UNTIL CRITERION IS MET

C     FIRST ITERATION
      IRR  = 2
      VO   = V2
      FORO = FORCE2
      V2   = 1.05 * V2
      GO TO 20

C     SUBSEQUENT ITERATIONS
   30 IRR  = IRR + 1
      IF ( ABS(FORCE2) .LE. -FTOL .OR. IRR .GT. 10 ) GO TO 40
      DELV = (V2 - VO) * FORCE2 / (FORO - FORCE2)
      IF ( ABS(DELV) .GT. .1*V2 ) DELV = SIGN( .1*V2, DELV)

C     IF DIRECTION IS WRONG, HALVE INTERVAL
      IF ( DELV*FORCE2 .LT. 0. ) GO TO 35
      V2   = (VO + V2) / 2.
      GO TO 20

   35 VO   = V2
      FORO = FORCE2
      V2   = V2 + DELV
      GO TO 20

   40 IF ( FORCE2 .GE. FTOL .OR. (V2-.001) .LE. APRVEL*SPD )
     1 GO TO 50
      V2 = APRVEL * SPD
      GO TO 20
  
C     DETERMINE LANDING PROFILE 
  
   50 DELTLP = TINC - ALPRUN
      HSTOP  = 100.0
      GAMFLT = -APRANG
      SGAM   = SIN( GAMFLT * RAD )
      TGAM   = TAN( GAMFLT * RAD )
      IA     = 1
      I      = 1
      HT     = APRHGT 
      CDGR   = CDGEAR
      TI     = 0.0
      DE     = 0.0
      APRVEL = V2 / SPD
      VE     = V2
  
C     BEGIN ITERATION ON START OF FLARE ALTITUDE
C     ITERATE UNTIL SOFT LANDING IS ACHIEVED
  
   60 RHOS  = RHOA * VE * VE
      CL    = GROSWT / RHOS
      ALPH1 = XINT1( CL,CLLD,10,ALPLD ) 
      IF ( ALPH1 .GT. ALMXLD ) ALPH1 = ALMXLD
      DELD  = DELHAP/ TGAM
      DELT  = DELHAP/ SGAM / VE 
  
C     START POINT FOR NEW (INTERMEDIATE) ALTITUDES
   70 HNEW = HT - DELHAP
      IF ( HNEW .GT. HSTOP ) GO TO 80
      HNEW = HSTOP
      DELT = (HT - HSTOP) / SGAM / VE
      DELD = (HT - HNEW) / TGAM
   80 TI = TI + DELT
      DE = DE + DELD
      ALPHE(1) = ALPH1
      K  = 1
  
C     START LOOP TO DETERMINE EQUILIBRIUM CONDITIONS - FIND ANGLE OF
C     ATTACK AND THRUST REQUIRED FOR APPROACH SPEED AND GLIDE SLOPE 
  
   90 CALL GEFECT ( ALPHE(K), HNEW, -GAMFLT, ALPLD, CLLD, CDLD, CDMLD,
     1              CL, CDG, AR*ARGEF, WHGT, SPAN )
      CLIFT = CL * RHOS
      DRAG  = (CDG + CDGR) * RHOS
      ALPNU = (ALPHE(K) + DELTLP) * RAD
      FH    = DRAG - GROSWT * SGAM
      FORCH = FH / COS(ALPNU)
      FV    = GROSWT * CGAM - CLIFT
      FORCV = FV / SIN(ALPNU)
      DELFOR(K) = FORCH - FORCV
  
C     ITERATE ON ALPHA UNTIL THE REQUIRED FORCE PERPENDICULAR TO
C     THE THRUST VECTOR = 0 
  
      IF ( ABS(DELFOR(K)) .LT. 0.00001 * GROSWT ) GO TO 120 
      IF ( K .GT. 1 ) GO TO 100 
  
C     FIRST ITERATION 
      K = K + 1
      ALPHE(K) = ALPHE(K - 1) - .1
      GO TO 90
  
C     SUBSEQUENT ITERATIONS 
  100 IF ( K .EQ. 10 ) GO TO 110
      DALPHE = (ALPHE(K)-ALPHE(K-1))/(DELFOR(K)-DELFOR(K-1)) * DELFOR(K)
      IF(K.GE.3)DALPHE = DALPHE*(1. - DALPHE/(ALPHE(K)-ALPHE(K-1))/2.0) 
      K = K + 1
      ALPHE(K) = ALPHE(K - 1) - DALPHE
      IF(ALPHE(K).LT.ALPMIN.AND.ALPHE(K-1).GT.ALPMIN) ALPHE(K) = ALPMIN 
      IF(ALPHE(K).GT.ALMXLD.AND.ALPHE(K-1).LT.ALMXLD) ALPHE(K) = ALMXLD 
      GO TO 90
  
C     NO CONVERGENCE - PRINT DIAGNOSTIC DATA
  110 WRITE(IU6, 530)
      WRITE(IU6, 540) (K, ALPHE(K), K, DELFOR(K), K = 1,10)
  
C     CALCULATE THRUST REQUIRED TO MAINTAIN GLIDE SLOPE 
  
  120 THRU  = (FORCH + FORCV) / (2.0 * NE)
      ALPH1 = ALPHE(K)
      IF ( TI .LT. IA .AND. I .GT. 1 ) GO TO 130
  
C     FILL OUTPUT TABLES AT ONE SECOND INTERVALS
      CDD(I)  = CDG + CDGR
      CLL(I)  = CL
      V(I)    = VE / SPD
      T(I)    = TI
      D(I)    = DE
      TANG(I) = ALPH1 + DELTLP
      ALP(I)  = ALPH1
      ALT(I)  = HNEW
      TH(I)   = THRU * NE
      GAM(I)  = -GAMFLT
      EM(I)   = VE / SPDSND
      ELOD(I) = 0.0
  
      IF ( I .GT. 1 ) IA = IA + 1
      I = I + 1
  130 HT = HNEW
      IF ( HNEW .NE. HSTOP ) GO TO 70
      IF ( HNEW .NE. 100.0 ) GO TO 140
  
C     FIRST PLATEAU, H = 100., HAS BEEN REACHED 
      MCUT    = 1
      HST     = 100.0
      DST     = DE
      TST     = TI
      FDLIM   = 2.*(HST/TGAM) + DST
      ALPHST  = ALPH1
      GAMST   = GAMFLT
      VST     = VE
      H(MCUT) = OBSLD / 2.
      GO TO 260
  
C     SECOND PLATEAU, START OF FLARE, HAS BEEN REACHED
  140 CONTINUE
      DFLAR  = DE
      TFLAR  = TI
      HFLAR  = HNEW
      ALPFLR = ALPH1
      VFLAR  = VE
      FLDMAX = 0.25 * G
      FLDMX1 = FLDMAX
      FLDMX2 = 1.0
      LAN    = 1
      DELT   = DELDFL / VST 
      THMAX  = THRU
  
C     COMPUTE TRAJECTORY FROM START OF FLARE TO LANDING
  
      VVERT = VE * SGAM
      VHORZ = VE * CGAM
      IANG  = 1
      IGAM  = 1
      LIMV  = 0
      ACCH  = 0.0
      ACCV  = 0.0
      ACVO  = 0.0
      ACHO  = 0.0
      ACVE  = 0.0
      ACHE  = 0.0
      SANO  = SGAM
  
C     BEGIN FLARE STEP - NOTE VERTICAL ACCELERATION IS POSITIVE UP
C     VERTICAL VELOCITY IS POSITIVE DOWN
  
  150 VVO = VVERT - (DELT * ACVE + 2.0 * ACVO) * DELT / 2.0
      IF ( VVO .GT. VVERT ) VVO = VVERT
      IF ( DELT .LT. 0.1 * DELDFL / VST ) GO TO 160 
      IF ( VVO  .GE. 0.0 )                GO TO 160
  
C     IF VERTICAL VELOCITY IS NEGATIVE, FIND NADIR
      VVO   = 0.0
      DELTA = VVERT / ACVO
      IF ( ACVE .NE. 0.0 )
     1    DELTA = (SQRT( ACVO**2 + 2.0 * ACVE * VVERT ) - ACVO) / ACVE
      IF ( DELT .GT. DELTA ) DELT = DELTA
  
  160 VHO    = VHORZ - (DELT * ACHE + 2.0 * ACHO) * DELT / 2.0
      IF ( VHO .GE. VMU ) GO TO 165
      VHO    = VMU
      LIMV   = 1
  165 VO     = SQRT(VVO * VVO + VHO * VHO)
      SANGLE = VVO / VO
      IF ( SANGLE .GT. SANO ) SANGLE = SANO
      SANO   = SANGLE
      CANGLE = SQRT(1. - SANGLE*SANGLE)
      GAMFLT = ASIN(SANGLE) / RAD
      M      = 1
      H1 = HT - (VVERT - (3. * ACVO + DELT * ACVE) * DELT / 6.) * DELT
      RHOS   = RHOA * VO * VO

C     GRADUALLY REDUCE THRUST PROPORTIONAL TO FLIGHT PATH ANGLE
      THNU   = XINT1( VO,VELLD,10,THRLD ) 
      THRU   = THNU + (THMAX - THNU) * SANGLE / SGAM
  
C     ONCE ALPHA HAS BEEN CONSTRAINED, GRADUALLY REDUCE MAXIMUM 
C     VERTICAL ACCELERATION FOR SMOOTH TRANSITION 
      IF(IGAM.NE.1) FLDMAX = FLDMX2 + (FLDMX1-FLDMX2) / GAMMAX * GAMFLT 
      ALPOLD = ALPH1
      IF ( IANG .GT. 1 ) GO TO 170
C     CONTINUE FLARE ROTATION 
      ALPH1 = ALPH1 + VANGL * DELT
      IF ( ALPH1 .LE. ALMXLD ) GO TO 170
C     ALPHA CONSTRAINED BY ALMXLD 
      ALPH1 = ALMXLD
      IANG  = 2
  
  170 CALL GEFECT ( ALPH1, H1, -GAMFLT, ALPLD, CLLD, CDLD, CDMLD, CL,
     1              CDG, AR*ARGEF, WHGT, SPAN )
      DRAG  = (CDG + CDGR) * RHOS
      CLIFT = CL * RHOS
      TFCT  = NE * SIN( (ALPH1 + DELTLP - GAMFLT) * RAD )
      TFCC  = SQRT(NE*NE - TFCT*TFCT)
  172 FORCV = CLIFT * CANGLE + DRAG * SANGLE - GROSWT + THRU * TFCT
      IF ( FORCV .GE. 0. ) GO TO 173
      FORCV = 0.
      THRU  = ( GROSWT - DRAG * SANGLE - CLIFT * CANGLE ) / TFCT
  173 FORCH = DRAG * CANGLE - CLIFT * SANGLE - THRU * TFCC
      IF ( FORCH .GE. -.1 .OR. LIMV .EQ. 0 ) GO TO 175
      FORCH = 0.
      THRU  = ( DRAG * CANGLE - CLIFT * SANGLE ) / TFCC
      GO TO 172
  175 ACCV  = FORCV * G / GROSWT
      IF ( ACCV .LT. FLDMAX .AND. M .EQ. 1 ) GO TO 200 
  
C     ALPHA IS CONSTRAINED BY NORMAL ACCELERATION LIMIT 
C     ITERATE ON ALPHA TO GET MAXIMUM VALUE AT MAXIMUM NORMAL ACCEL.
  
      ACN(M) = ACCV - FLDMAX
      IANG   = 2
      IF ( ABS(ACN(M)) .LT. 0.001 .AND. ACCV .GE. 0.0 ) GO TO 200 
      ALPHE(M) = ALPH1
      M        = M + 1
      IF ( M .GT. 2 ) GO TO 180
  
C     FIRST ITERATION - SET ANGLE EQUAL TO MINIMUM ALLOWABLE ANGLE
      ALPH1 = ALPOLD - VANGL * DELT
      GO TO 170
  
C     SUBSEQUENT ITERATIONS 
  180 IF ( M .GT. 10 ) GO TO 190
      IF ( ACCV .GT. FLDMAX .AND. M .EQ. 3 ) GO TO 200
      IF ( ACCV .LT. FLDMAX .AND. ALPH1 .GE. ALMXLD ) GO TO 200
      ALPH1 = ALPHE(M-1) - (ALPHE(M-1) - ALPHE(M-2)) /
     1        (ACN(M-1) - ACN(M-2)) * ACN(M-1)
      IF ( ALPH1 .GT. ALMXLD ) ALPH1 = ALMXLD
      GO TO 170
  
C     NO CONVERGENCE - PRINT DIAGNOSTIC DATA
  190 WRITE(IU6, 550)
      WRITE(IU6, 560) (M, ALPHE(M), M, ACN(M), M = 1,10)
  
  200 ACCH  = FORCH * G / GROSWT
      DELV  = (ACCV + ACVO) * DELT / 2.0
      IF (((VVERT-DELV).GT.-0.00001) .AND. (DELT.GT.0.001)) GO TO 210 
  
C     IF VELOCITY PROJECTS PAST ZERO, TRY TO HIT ZERO 
      DELV = VVERT
      DELT = 2.0 * VVERT / (ACCV + ACVO)
      LAN  = LAN + 1
C     LAN > 1 INDICATES VERTICAL VELOCITY HAS REACHED ZERO
  
  210 HT    = HT - DELT * (VVERT - (2.0 * ACVO + ACCV) * DELT / 6.0)
      DE    = DE + DELT * (VHORZ - (2.0 * ACHO + ACCH) * DELT / 6.0)
      VVERT = VVERT - DELV
      VHORZ = VHORZ - (ACCH + ACHO) * DELT / 2.0
      IF ( VHORZ .LT. VMU ) VHORZ = VMU
      IF ( IGAM .GT. 1 .OR. IANG .EQ. 1 ) GO TO 220
  
C     IF ALPHA IS CONSTRAINED, SET UP FOR ACCELERATION LIMIT
      VE     = SQRT(VHORZ * VHORZ + VVERT * VVERT)
      GAMMAX = VVERT / VE / RAD
      IGAM   = 2
  
  220 ACVE = (ACCV - ACVO) / DELT
      ACHE = (ACCH - ACHO) / DELT
      ACVO = ACCV
      ACHO = ACCH
      IF ( IANG .LT. 2 ) ALPH1 = ALPOLD + VANGL * DELT
      TI = TI + DELT
  
C     FILL OUTPUT TABLES AT ONE SECOND INTERVALS
      IF ( TI .LT. IA ) GO TO 230
      VE      = SQRT( VHORZ * VHORZ + VVERT * VVERT )
      CDD(I)  = CDG + CDGR
      CLL(I)  = CL
      V(I)    = VE / SPD
      T(I)    = TI
      D(I)    = DE
      TANG(I) = ALPH1 + DELTLP
      ALP(I)  = ALPH1
      ALT(I)  = HT
      TH(I)   = THRU * NE
      GAM(I)  = -VVERT / VE / RAD
      EM(I)   = VE / SPDSND
      ELOD(I) = SQRT(ACCV * ACCV + ACCH * ACCH)
      IA      = IA + 1
      I       = I + 1
  
  230 IF ( LAN .LT. 2 .AND. DE .LT. FDLIM ) GO TO 150
      VE = VHORZ
  
C     ITERATE ON FLARE ALTITUDE UNTIL ALTITUDE IS 0 AT END OF FLARE

      IF ( ABS(HT) .LT. 0.2 ) GO TO 270
      H(MCUT)     = HSTOP
      HLAND(MCUT) = HT
      MCUT        = MCUT + 1
      IF ( MCUT .GT. 2 ) GO TO 240

C     FIRST ITERATION 
      H(MCUT) = H(MCUT-1) - HLAND(MCUT-1) * 1.25
      GO TO 260
  
C     SUBSEQUENT ITERATIONS 
  240 IF ( MCUT .GT. 10 ) GO TO 250
      DHM     = HLAND(MCUT-1) - HLAND(MCUT-2)
      H(MCUT) = H(MCUT-1) - 5.
      IF ( ABS(DHM) .GE. .1 ) H(MCUT) = H(MCUT-1)
     1                   - (H(MCUT-1) - H(MCUT-2)) / DHM * HLAND(MCUT-1)
      IF ( ABS(HLAND(MCUT-1)) .GE. ABS(HLAND(MCUT-2)) ) 
     1   H(MCUT) = (H(MCUT) + H(MCUT-1)) / 2.0
      IF (H(MCUT) .LE. 0.0) H(MCUT)=H(MCUT-1)/2.0
      GO TO 260
  
C     NO CONVERGENCE - PRINT DIAGNOSTIC DATA
  250 WRITE(IU6, 570)
      WRITE(IU6, 580) (MCUT, H(MCUT), MCUT, HLAND(MCUT), MCUT = 1,10)
      GO TO 270
  
C     SET UP FOR NEW START-OF-FLARE ITERATION 
  
  260 DE     = DST
      TI     = TST
      GAMFLT = GAMST
      IA     = TST + 1
      HT     = HST
      ALPH1  = ALPHST
      VE     = VST
      HSTOP  = H(MCUT)
      I      = 2
      GO TO 60
  
C     LANDING DISTANCE IS OBTAINED FROM INTERPOLATION OF APPROACH PATH
C     DATA USING THE OBSTACLE HEIGHT
  
  270 ICNT   = I - 1
      DOBST  = XINT1(OBSLD,ALT,ICNT,D ) 
      TOBST  = XINT1(OBSLD,ALT,ICNT,T ) 
      VOBST  = XINT1(OBSLD,ALT,ICNT,V ) 
      AOBST  = XINT1(OBSLD,ALT,ICNT,ALP ) 
      THOBST = XINT1(OBSLD,ALT,ICNT,TH ) 
      DST    = DST - DOBST
      DFLAR  = DFLAR - DOBST
      TST    = TST - TOBST
      TFLAR  = TFLAR - TOBST
  
C     PRINT OUT DATA FROM START OF APPROACH TO TOUCHDOWN
  
      IF ( IFLAG .GT. 0 .AND. ITIME .GT. 0 ) THEN
         WRITE(IU6, 590)
         WRITE(IU6, 600) (T(J)-TOBST, D(J)-DOBST, ALT(J), V(J), EM(J),
     1                   GAM(J), ALP(J), TANG(J), TH(J), CLL(J), CDD(J),
     2                   CLL(J)/CDD(J), ELOD(J), J = 1,ICNT) 
      ENDIF

C     START ROLLOUT CALCULATIONS FOR LANDING

      CDSP   = 0.0
      CLSP   = 0.0
      FMU    = ROLLMU
      SPOIL  = 0.0
      BRAKE  = 0.0
      REVRS  = 0.0
      REVST  = 0.0
      TTD    = TI
      DTD    = DE - DOBST
      VTD    = VE
      ALPHTD = ALPH1
  280 DELT   = DELTRN 
      TIA    = TI - TTD + DELT
  
C     SET TIA TO NEXT EVENT IF APPROPRIATE
      IF ( TIA .GT. TISP  .AND. SPOIL .EQ. 0.0 ) TIA = TISP 
      IF ( TIA .GT. TIBR  .AND. BRAKE .EQ. 0.0 ) TIA = TIBR 
      IF ( TIA .GT. TIRV  .AND. REVST .EQ. 0.0 ) TIA = TIRV 
      IF ( TIA .GT. TICUT .AND. CUTBK .EQ. 0.0 ) TIA = TICUT
      DELT   = TIA + TTD - TI
  
C     REVERSE ROTATION TO BRING NOSE WHEEL DOWN TO GROUND 
  
  290 IF ( (IA - TI) .GT. 1 ) IA = IA - 1 
      IF ( ALPNU .EQ. ALPRUN ) GO TO 310
      ALPNU  = ALPH1 - VANGL * DELT / 2.0
      ALPH1  = ALPH1 - VANGL * DELT
      IF ( ALPH1 .GT. ALPRUN ) GO TO 300
      ALPNU  = (ALPH1 + VANGL * DELT + ALPRUN) / 2.0
      ALPH1  = ALPRUN
c     ohad 16/7/08 - 0.0d0 rather than 0.
c  300 CALL GEFECT ( ALPNU, 0.0, 0.0, ALPLD, CLLD, CDLD, CDMLD, CL, CDG, 
c     1              AR*ARGEF, WHGT, SPAN )
  300 CALL GEFECT ( ALPNU, 0.0d0, 0.0d0, ALPLD, CLLD, CDLD, CDMLD, CL, 
     1             CDG,  AR*ARGEF, WHGT, SPAN )
      CDW    = CDG
  310 VO     = VE - ACCH * DELT / 2.0
      RHOS   = RHOA * VO * VO
      CDG    = CDW + CDGR + CDSP + CDREV*REVRS
      DRAG   = CDG * RHOS
      CLIFT  = (CL + CLSP + CLREV*REVRS) * RHOS
      FORCV  = CLIFT - GROSWT
      FFRICT = 0.0
      IF ( FORCV .LT. 0.0 ) FFRICT = -FMU * FORCV
      THRU   = THM1
      IF ( CUTBK .GT. 0.0 ) THRU = XINT1( VO,VELLD,10,THRLD ) 
      IF ( REVRS .GT. 0.0 ) THRU = (1. - REVRS) * THRU +
     1     REVRS * RVFACT * XINT1( VO,VELRV,10,THRRV )
      FORCH  = FFRICT + DRAG - THRU * NE
      ACCH   = FORCH / GROSWT * G
  
C     CONSTRAIN DECELERATION IF LIMIT IS EXCEEDED 
      IF ( ACCH .GT. ACCLIM ) ACCH = ACCLIM
      DE = DE + (VE - ACCH * DELT / 2.0) * DELT
      TI = TI + DELT
      VE = VE - ACCH * DELT
      IF ( IFLAG .EQ. 0   .OR. ITIME .EQ. 0 ) GO TO 330 
      IF ( TIA .EQ. TISP  .OR. TIA .EQ. TIBR .OR. 
     1     TIA .EQ. TICUT .OR. ISTOP .EQ. 1 ) GO TO 320 
      IF ( TI  .LT. IA )                      GO TO 330 
  
C     PRINT DATA AT ONE SECOND INTERVALS OR AT EVENT
  
  320 VP  = VE / SPD
      TP  = ALPH1 + DELTLP
      AP  = 0.0
      THP = THRU * NE
      EP  = VE / SPDSND
      IF ( VE .GT. 0. .OR. ISTOP .EQ. 1 )
     1 WRITE(IU6, 600) TI-TOBST, DE-DOBST, AP, VP, EP, AP, ALPH1, TP,
     2               THP, CL+CLSP+REVRS*CLREV, CDG, (CL+CLSP)/CDG, ACCH
      IA = IA + 1
  
C     DEPLOY SPOILERS 
  330 IF ( TIA .NE. TISP ) GO TO 340
      CDSP  = CDSPOL
      CLSP  = CLSPOL
      SPOIL = 1.0
      DSP   = DE - DOBST
      TSP   = TI - TOBST
      ALPSP = ALPH1
      VSP   = VE
  
C     APPLY BRAKES
  340 IF ( TIA .NE. TIBR ) GO TO 350
      BRAKE  = 1.0
      DBRK   = DE - DOBST
      TBRK   = TI - TOBST
      ALPBRK = ALPH1
      VBRK   = VE
      FMU    = BRAKMU
  
C     REVERSE THRUST
  350 IF ( TIA .NE. TIRV ) GO TO 360
      REVRS  = 1.0
      REVST  = 1.0
      DREV   = DE - DOBST
      TREV   = TI - TOBST
      ALPREV = ALPH1
      VREV   = VE
  
C     CUT BACK ENGINES
  360 IF (  TIA  .EQ. TICUT ) CUTBK = 1.0
      IF ( ISTOP .EQ. 1     ) GO TO 370
  
C     REVERSE THRUST CUTOFF
      IF ( REVRS .GT. 0. ) THEN
         IF ( REVRS .LT. .999 ) THEN
            REVRS = 0.
         ELSE
            VPR = 2.*VE - VPR
            IF ( VPR .LT. REVCUT ) REVRS = (VE-REVCUT) / (VE-VPR)
         ENDIF
         VPR = VE
      ENDIF
  
C  IF VELOCITY LESS THAN 0.0 ADJUST AND DO 1 MORE 
  
      IF (  VE   .GT. 0.0   ) GO TO 280
      TI    = TI - DELT
      VE    = VE + ACCH * DELT
      DE    = DE - (VE - ACCH * DELT / 2.0) * DELT
      DELT  = VE / ACCH
      ISTOP = 1
      GO TO 290
  
C     END OF LOOP - AIRCRAFT HAS STOPPED
  
  370 CONTINUE
      TTD    = TTD - TOBST
      TSTOP  = TI - TOBST
      DSTOP  = DE - DOBST
      VFLAR  = VFLAR / SPD
      VTD    = VTD / SPD
      VSP    = VSP / SPD
      VBRK   = VBRK / SPD
      VREV   = VREV / SPD
      FDLNGT = DSTOP / FARFCT
      IF ( IFLAG .LE. 0 ) GO TO 400
  
C     PRINT LANDING RESULTS 
  
      WRITE(IU6, 620)
      WRITE(IU6, 650) OBSLD, VOBST, ZERO,  ZERO,  AOBST,  OBSLD,
     1                       VFLAR, TFLAR, DFLAR, ALPFLR, HFLAR, 
     2                       VTD,   TTD,   DTD,   ALPHTD, ZERO
      WRITE(IU6, 660) VSP,   TSP,   DSP,   ALPSP,  ZERO
      WRITE(IU6, 670) VBRK,  TBRK,  DBRK,  ALPBRK, ZERO
      IF ( REVRS * RVFACT .NE. 0.0 ) WRITE(IU6,680 )
     1                VREV,  TREV,  DREV,  ALPREV, ZERO
      WRITE(IU6, 690) ZERO,  TSTOP, DSTOP, ALPRUN, ZERO
      FVS = 1.3 - .1*IFITE
      WRITE(IU6, 630) VSTALL, FVS, FVS*VSTALL, VMU/SPD/1.05, VMU/SPD
      WRITE(IU6, 640) V2/SPD, ALP2, GAM2*100., FORCE2
      IF ( FORCE2 .LT. FTOL ) WRITE(IU6, 710)
      IF ( IFITE .EQ. 0 ) THEN
         WRITE(IU6, 700) FARFCT, FDLNGT
      ELSE
         WRITE(IU6, 720) FDLNGT
      ENDIF
  400 RETURN
  
  430 FORMAT (/32X,35HDRAG POLAR - GEAR DRAG NOT INCLUDED/)
  440 FORMAT (5X,15HANGLE OF ATTACK,4X,10F10.2)
  450 FORMAT (5X,16HLIFT COEFFICIENT,3X,10F10.4)
  460 FORMAT (5X,16HDRAG COEFFICIENT,3X,10F10.4)
  470 FORMAT (/5X,7HCDMLD =,1F7.4,9X,8HCDGEAR =,F7.4,9X,8HCDEOUT =,
     1        F7.4,9X,7HCLLDM =,F7.4,8X,16HLANDING WEIGHT =,F10.1) 
  475 FORMAT (/5X,7HCLMAX =,F7.4,13H FOR ALMXLD =,F7.2)
  480 FORMAT (/32X,33HIDLE NET THRUST VALUES FOR ENGINE/)
  490 FORMAT (/32X,32HREVERSE THRUST VALUES FOR ENGINE/)
  500 FORMAT (5X,9HVELOCITY ,10F11.1) 
  510 FORMAT (5X,9HTHRUST   ,10F11.1)
  530 FORMAT (/10X,60HITERATION OF CONSTANT VELOCITY ANGLE OF ATTACK IS 
     1INCOMPLETE )
  540 FORMAT  (10X,6HALPHE(,I2,4H) = ,F9.4,5X,7HDELFOR(,I2,4H) = ,
     1 F11.2)
  550 FORMAT (/10X,65HUNABLE TO ITERATE ON FLARE NORMAL ACCELERATION - P
     1ROGRAM CONTINUE )
  560 FORMAT  (10X,6HALPHE(,I2,4H) = ,F9.4,5X,4HACN(,I2,4H) = ,F9.4)
  570 FORMAT (/10X,64HITERATION OF TOUCHDOWN ALTITUDE IS INCOMPLETE - PR
     1OGRAM CONTINUE)
  580 FORMAT  (10X,2HH(,I2,4H) = ,F10.4,5X,6HHLAND(,I2,4H) = ,F10.4)
  590 FORMAT (//2X,4HTIME,5X,8HDISTANCE,3X,8HALTITUDE,3X,8HVELOCITY,5X,
     1 4HMACH,6X,5HGLIDE,4X,6HATTACK,5X,6HENGINE,5X,6HENGINE,5X,4HLIFT,
     2 5X,4HDRAG,6X,3HL/D,4X,6HDECEL.,/45X,6HNUMBER,5X,5HSLOPE,5X,
     3 5HANGLE,4X,9HINCIDENCE,3X,6HTHRUST,4X,6HCOEFF.,3X,6HCOEFF.,4X,
     4 5HRATIO,/8H SECONDS,5X,4HFEET,7X,4HFEET,7X,5HKNOTS,15X,7HDEGREES,
     5 3X,7HDEGREES,4X,7HDEGREES,4X,6HPOUNDS,31X,6HFT/S/S,/)
  600 FORMAT (F7.2,3F11.2,F11.4,2F10.3,F11.3,F12.1,2F9.4,2F9.2)
  610 FORMAT (/'# LANDING PERFORMANCE RESULTS')
  620 FORMAT (/' LANDING PERFORMANCE',T33,'VELOCITY     TIME',T53,
     1 'DISTANCE    ALPHA   ALTITUDE',/,T35,
     2 'KNOTS      SEC.     FEET       DEG.     FEET',/)
  630 FORMAT (' STALL SPEED (VS)',T31,F10.2,/F9.2,' VS',T31,F10.2,/
     1     /' UNSTICK SPEED (VU)',T31,F10.2,/'     1.05 VU',T31,F10.2,/)
  640 FORMAT (' MISSED APPROACH CLIMB',T31,F10.2,T61,F9.2,//
     1 '     FLIGHT PATH SLOPE = ',F8.2,' PERCENT' /
     2 '     NET THRUST        = ',F8.0,' POUNDS' )
  650 FORMAT (F8.0,' FOOT OBSTACLE',T31,F10.2,F9.2,F11.2,2F9.2,/
     1        '     START OF FLARE',T31,F10.2,F9.2,F11.2,2F9.2,/
     2        '     TOUCHDOWN ',    T31,F10.2,F9.2,F11.2,2F9.2)
  660 FORMAT(5X,'SPOILER ACTUATION',T31,F10.2,F9.2,F11.2,2F9.2)
  670 FORMAT(5X,'WHEEL BRAKES APPLIED',T31,F10.2,F9.2,F11.2,2F9.2)
  680 FORMAT(5X,'THRUST REVERSAL',T31,F10.2,F9.2,F11.2,2F9.2)
  690 FORMAT(5X,'END OF LANDING',T31,F10.2,F9.2,F11.2,2F9.2,/)
  700 FORMAT(/' FAR LANDING FIELD LENGTH = LANDING DISTANCE /',F3.1,
     1        T50,F11.2,' FEET' )
  710 FORMAT (/51H * * * FAILED MISSED APPROACH CLIMB CRITERION * * * )
  720 FORMAT(/' LANDING DISTANCE ',T50,F11.2,' FEET' )
      END

CCCCCCCCCCCCCCCCCCCCCCC  SUBROUTINE SEPARATOR  CCCCCCCCCCCCCCCCCCCCCCCCC

      SUBROUTINE DEFPRO

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c     ohad 15/7/08
c      IMPLICIT INTEGER*8 (I-N)
      IMPLICIT INTEGER*4 (I-N)

C  INPUT DATA FOR TAKEOFF NOISE PROFILE

      COMMON /UNITS / IU5, IU6, IU7, IU8, IU9, IU16, IU17, IU18
      COMMON /SEGDAT/ DSTP(20), TSTP(20), HSTP(20), VSTP(20), DLT(20),
     1                AFX(20), GFX(20), VFX(20), ENGSC(20), HMN(20),
     2                GRAEO(20), GROEO(20), SPRT(20), IFX(20), IFLP(20),
     3                NSEG, NTIME, IPCMAX
      COMMON /KEYDAT/ KEYS(20)
      COMMON /TOCOMM/ CDMT  ,DMT   ,ALPROT,DELTCL,SWREF ,ARRET ,VROTAT, 
     1                OBSTO ,DELTRO,DELVTO,ALMXTO,TIGEAR,CLTOM ,CDMTO , 
     2                CDDP(10), CLDPOC(10), ALPTO(10), CLTO(10),
     3                CDTO(10), IBAL
      COMMON /PRAERO/ ALPRO(10,10), CLPRO(10,10), CDPRO(10,10),
     1                DFLAP(10), TXF, ALPMIN, GAMLIM
      COMMON /NOISEP/ NOPRO, NPFILE, NOISE

      CHARACTER*4     KEYS, KEY
      NAMELIST/PROIN/ ALPRO, CLPRO, CDPRO, NPOL, DFLAP, NTIME, NPFILE,
     1                TXF, SPRATE, ALPMIN, IPCMAX, GAMLIM
      NAMELIST/SEGIN/ KEY, NFLAP, IFIX, DSTOP, TSTOP, HSTOP, VSTOP,
     1                AFIX, GFIX, VFIX, ENGSCL, HMIN, DELT, GRDAEO,
     2                GRDOEO, SPRATE

C     INITIALIZE AND READ AERODYNAMIC DATA

      DO 10 I = 1,10
      ALPRO(I,1) = ALPTO(I)
      CLPRO(I,1) = CLTO(I)
   10 CDPRO(I,1) = CDTO(I)
      NPOL   = 1
      NTIME  = 0
      IPCMAX = 1
      SPRATE = 0.1
      READ ( IU5, NML=PROIN, ERR=9000, END=9000 )

C     DEFAULT VALUES - FIRST, PARAMETERS THAT DEFAULT TO PREVIOUS VALUES

      NSEG   = 1
      NFLAP  = 1
      IFIX   = 1
      ENGSCL = 1.
      GRDAEO = 2.29061
      GRDOEO = 0.0

C     THEN, PARAMETERS THAT MUST BE INPUT TO BE USED

   20 KEY    = 'CHAN'
      DSTOP  = 0.
      TSTOP  = 0.
      HSTOP  = 0.
      VSTOP  = 0.
      HMIN   = 0.
      AFIX   = 0.
      GFIX   = 0.
      VFIX   = 0.
      DELT   = 1.

C     READ TAKEOFF AND CLIMB SEGMENT DATA AND FILL ARRAYS

      READ ( IU5, NML=SEGIN, ERR=9002, END=9002 )

      KEYS(NSEG)  = KEY
      IFX(NSEG)   = IFIX
      IFLP(NSEG)  = NFLAP
      DSTP(NSEG)  = DSTOP
      TSTP(NSEG)  = TSTOP
      SPRT(NSEG)  = SPRATE
      IF ( KEY .EQ. 'OBST' .AND. HSTOP .LE. 0. ) HSTOP = OBSTO
      HSTP(NSEG)  = HSTOP
      VSTP(NSEG)  = VSTOP
      HMN(NSEG)   = HMIN
      IF ( HSTOP .GT. 0. .AND. HSTOP .LT. HMIN ) HSTP(NSEG) = HMIN
      AFX(NSEG)   = AFIX
      GFX(NSEG)   = GFIX
      VFX(NSEG)   = VFIX
      ENGSC(NSEG) = ENGSCL
      GRAEO(NSEG) = GRDAEO
      GROEO(NSEG) = GRDOEO
      IF ( KEY .EQ. 'LIFT' ) DELT = DELTRO
      IF ( KEY .EQ. 'OBST' ) DELT = DELTCL
      DLT(NSEG)   = DELT

C     CHECK FOR FINAL SEGMENT, IF NOT, READ NEXT SEGMENT

      IF ( KEY .EQ. 'LAST' ) GO TO 30
      NSEG   = NSEG + 1
      ENGSCL = 0.
      GO TO 20

C     LIMIT INTERMEDIATE SEGMENTS

   30 DO 40 I = 2,NSEG
      J  = NSEG - I + 1
      IF ( DSTP(J) .LE. 0. ) DSTP(J) = DSTP(J+1)
      IF ( TSTP(J) .LE. 0. ) TSTP(J) = TSTP(J+1)
      IF ( HSTP(J) .LE. 0. ) HSTP(J) = HSTP(J+1)
   40 CONTINUE

C     OUTPUT AERODYNAMIC DATA

      WRITE(IU6, 120) NTIME, NPFILE, IPCMAX, TXF, ALPMIN, GAMLIM
  120 FORMAT(///'# NAMELIST $PROIN',/
     1  '  INPUT DATA FOR CLIMB PROFILE FOR NOISE CALCULATIONS',//
     2  '   DESCRIPTION',16X,'NAME',9X,'VALUE  DIMENSIONS',// 
     3  '   PROFILE PRINT SWITCH       NTIME  ',I11,/
     4  '   PROFILE OUTPUT FILE SWITCH NPFILE ',I11,/ 
     5  '   MAXIMUM POWER CODE         IPCMAX ',I11,/ 
     6  '   TAXI OUT FUEL              TXF    ',F11.2,'  LB',/
     7  '   MINIMUM CLIMB ALPHA        ALPMIN ',F11.2,'  DEG',/ 
     8  '   MINIMUM FLIGHT PATH ANGLE  GAMLIM ',F11.2,'  DEG')

      WRITE(IU6, 50)
   50 FORMAT (/' TAKEOFF AND CLIMB DRAG POLARS - GEAR DRAG NOT',
     1 ' INCLUDED')
      DO 60 I = 1,NPOL
   60 WRITE(IU6, 70) DFLAP(I), (ALPRO(J,I), J = 1,10), 
     1 (CLPRO(J,I), J = 1,10), (CDPRO(J,I), J = 1,10)
   70 FORMAT(/' FLAP SETTING   DFLAP =',F6.2,
     1 /'   ANGLE OF ATTACK    ALPRO ',10F10.2,
     2 /'   LIFT COEFFICIENT   CLPRO ',10F10.6,
     3 /'   DRAG COEFFICIENT   CDPRO ',10F10.6 )

C     OUTPUT SEGMENT DEFINITION DATA

      WRITE(IU6, 100) (I, KEYS(I), IFX(I), IFLP(I), DSTP(I), TSTP(I),
     1                VSTP(I), HSTP(I), HMN(I), AFX(I), GFX(I), VFX(I),
     2                ENGSC(I), DLT(I), GRAEO(I), GROEO(I), SPRT(I),
     3                I = 1,NSEG)
  100 FORMAT(//'#  NAMELISTS $SEGIN',/
     1 '   TAKEOFF AND CLIMB SEGMENT DEFINITION INPUT DATA',//
     1 ' SEGMENT   KEY  IFIX  NFLAP    DSTOP   TSTOP   VSTOP    ',
     2 'HSTOP     HMIN    AFIX    GFIX    VFIX   ENGSCL   DELT ',
     3 'GRDAEO GRDOEO SPRATE',
     4 //(I5,5X,A4,I5,I6,3X,3F8.1,2F9.1,2F8.2,F8.1,F9.3,F7.2,3F7.3))

      RETURN

 9000 WRITE(IU6,9001) IU5
 9001 FORMAT (//' ERROR READING NAMELIST $PROIN FROM UNIT',I3,/,
     2          ' PROGRAM ABORTED IN SUBROUTINE DEFPRO.',/)
      STOP

 9002 WRITE(IU6,9003) IU5
 9003 FORMAT (//' ERROR READING NAMELIST $SEGIN FROM UNIT',I3,/,
     2          ' PROGRAM ABORTED IN SUBROUTINE DEFPRO.',/)
      STOP

      END

CCCCCCCCCCCCCCCCCCCCCCC  SUBROUTINE SEPARATOR  CCCCCCCCCCCCCCCCCCCCCCCCC

      SUBROUTINE PROFIL (GROSWT, ARN, SW, GLOV, NENG, IPRINT ) 

C  COMPUTE TAKEOFF AND CLIMB PROFILE FOR NOISE CALCULATION
C     GROSWT = AIRCRAFT CURRENT RAMP WEIGHT 
C     ARN,SW,GLOV = CURRENT ASPECT RATIO, WING AREA, AND GLOVE AREA 
C     NENG   = NUMBER OF ENGINES
C     IPRINT = PRINT CONTROL PARAMETER

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c     ohad 15/7/08
c      IMPLICIT INTEGER*8 (I-N)
      IMPLICIT INTEGER*4 (I-N)
  
      COMMON /UNITS / IU5, IU6, IU7, IU8, IU9, IU16, IU17, IU18
      COMMON /XFLOPC/ IXFL, IU19, IU20
      COMMON /BALFLD/ ALPRUN, ARGEF, BRAKMU, CDGRO, CDSPOL, CLSPOL,
     1                RHOA, ROLLMU, TIBRA, TICUT, TINC, TISPA, VANGL,
     2                WHGT, PILOTT, CDEOT, ITIME, ISPOL, IREV
      COMMON /SCRTCH/ T(500), D(500), ALT(500), V(500), GAM(500),
     1                ALP(500), TH(500), CLL(500), CDD(500), ACL(500),
     2                WT(500), TTM(500), FLAPA(500), RDUM(1500),
     3                IGR(500), KA(20), KSEG, KDUM(2679)
      COMMON /TOCOMM/ CDMT  ,DMT   ,ALPROT,DELTCL,SWREF ,ARRET ,VROTAT, 
     1                OBSTO ,DELTRO,DELVTO,ALMXTO,TIGEAR,CLTOM ,CDMTO , 
     2                CDDP(10), CLDPOC(10), ALPTO(10), CLTO(10),
     3                CDTO(10), IBAL
      COMMON /TOLTH / APA, ANS1, DTCT, SPDSND, THFACT, THREF, THRTO(10),
     1                THRLD(10), VELTO(10), VELLD(10), INTHTO, INTHLD
      COMMON /ROTSPD/ VROT, VEE2
      COMMON /PRAERO/ ALPRO(10,10), CLPRO(10,10), CDPRO(10,10),
     1                DFLAP(10), TXF, ALPMIN, GAMLIM
      COMMON /SEGDAT/ DSTP(20), TSTP(20), HSTP(20), VSTP(20), DLT(20),
     1                AFX(20), GFX(20), VFX(20), ENGSC(20), HMN(20),
     2                GRAEO(20), GROEO(20), SPRT(20), IFX(20), IFLP(20),
     3                NSEG, NTIME, IPCMAX
      COMMON /KEYDAT/ KEYS(20)
      COMMON /NOISEP/ NOPRO, NPFILE, NOISE
      COMMON /TAXFUL/ TAXOFL, ITXOUT
  
      CHARACTER*4 KEYS, KEY
      DIMENSION VIT(10), ALWR(10), HFOR(10), DELFOR(10)
      DATA RAD /0.0174533/


C     SCALE AERODYNAMIC DRAG ASSUMING PARABOLIC POLAR 
C     INITIALIZE CONSTANTS AND CONFIGURATION DATA 

      SPAN    = SQRT( ARN * (SW - GLOV) )
      CDM     = CDMT + DMT / SW
      DO 10 J = 1,5
      DO 10 I = 1,10
      CDPRO(I,J) = (CDPRO(I,J) - CDMTO) * ARRET / ARN + CDM
   10 CONTINUE
      CDGEAR  = CDGRO / SW
      CDEOUT  = CDEOT / SW
      CDMTO   = CDM
      ARRET   = ARN
      G       = 9.80665/.3048
      ZERO    = 0.
      KSEG    = NSEG
      SPD     = 1852./(.3048*3600.)
      NE      = NENG
      RHOA    = ANS1 * SW * 0.5
      IX      = 0
      ISEG    = 1
      CWT     = GROSWT - TXF
      IF ( TXF .LT. 0. ) CWT = GROSWT - TAXOFL
      ALFROT  = ALPROT
      IF ( ALFROT .GT. ALMXTO ) ALFROT = ALMXTO

C     CALCULATE PROFILE FROM START OF GROUND ROLL 
C     UNTIL ROTATION SPEED IS REACHED 
  
C     SET UP INITIAL CONDITIONS AT BRAKE RELEASE

      IF ( IPRINT .GT. 0 ) WRITE(IU6, 560)
  560 FORMAT(///'# PROFILE FOR NOISE CALCULATIONS',/
     1 /' TAKEOFF AND CLIMB PROFILE SEGMENT RESULT SUMMARY',//
     2  '  KEY     TIME   HEIGHT  DISTANCE   SPEED   GAMMA',
     3  '   ALPHA    WEIGHT  FLAPS      CL     L/D   EGEAR    THRUST',
     4  '   VJET   T/TMAX',/ )
      IA      = 1
      VE      = 0.0
      TTO     = ENGSC(1)
      D(IA)   = 0.0
      T(IA)   = 0.0
      V(IA)   = 0.0
      ALT(IA) = 0.0
      GAM(IA) = 0.0
      ALP(IA) = ALPRUN
      WT(IA)  = CWT
      IFP     = IFLP(1)
      FLAPA(IA) = DFLAP(IFP)
      IGR(IA) = 1

C     AERODYNAMICS FOR FIRST SEGMENT

c     ohad 16/7/08 - 0.0d0 rather than 0.
c      CALL GEFECT ( ALPRUN, 0., 0., ALPRO(1,IFP), CLPRO(1,IFP),
c     1     CDPRO(1,IFP), CDMTO, CL, CDG, ARRET*ARGEF, WHGT, SPAN )
      CALL GEFECT ( ALPRUN, 0.0d0, 0.0d0, ALPRO(1,IFP), CLPRO(1,IFP),
     1     CDPRO(1,IFP), CDMTO, CL, CDG, ARRET*ARGEF, WHGT, SPAN )
      CDG     = CDG + CDGEAR
      CDP     = XINT1( VE,VELTO,10,CDDP ) 
      DCL     = XINT1( VE,VELTO,10,CLDPOC ) / CL 
      CLL(IA) = CL + DCL
      CDD(IA) = CDG + CDP
      STINC   = NE * SIN( TINC * RAD )
      CTINC   = NE * COS( TINC * RAD )

C     INITIAL THRUST AND ACCELERATION

      THRU    = TTO
      CALL ENINT (ZERO, APA, THRU, FFO, 2, TMAX, ITD, IPCMAX)
      TH(IA)  = NE * THRU
      IF ( IPCMAX .GT. 1 )
     1 CALL ENINT (VE/SPDSND, APA, XTT, XFF, 1, TMAX, ITD, 1 )
      TTM(IA) = THRU / TMAX
      ACO     = (THRU * CTINC - ROLLMU * CWT) * G / CWT
      ACL(IA) = ACO

C     BEGIN LOOP ON GROUND RUN SEGMENTS

   20 IFP     = IFLP(ISEG)
      VSTOP   = VSTP(ISEG) * SPD
      DSTOP   = DSTP(ISEG)
      TSTOP   = TSTP(ISEG)
      IF ( ENGSC(ISEG) .GT. 0. ) ENGSCL  = ENGSC(ISEG)
      KEY     = KEYS(ISEG)
      IF ( VSTOP .LE. 0. .AND. KEY .EQ. 'ROTA' ) VSTOP = VROT
      DELTAV  = DELVTO 
      IF ( ISEG .EQ. 1 ) GO TO 30
c     ohad 16/7/08 - 0.0d0 rather than 0.
c      CALL GEFECT ( ALPRUN, 0., 0., ALPRO(1,IFP), CLPRO(1,IFP),
c     1     CDPRO(1,IFP), CDMTO, CL, CDG, ARRET*ARGEF, WHGT, SPAN )
      CALL GEFECT ( ALPRUN, 0.0d0, 0.0d0, ALPRO(1,IFP), CLPRO(1,IFP),
     1     CDPRO(1,IFP), CDMTO, CL, CDG, ARRET*ARGEF, WHGT, SPAN )
      CDG     = CDG + CDGEAR
  
C     INCREMENT VELOCITY UNTIL ROTATION SPEED OR STOP IS REACHED

   30 V1    = V(IA) + DELTAV
      IF ( V1 .LT. VSTOP ) GO TO 40
      V1    = VSTOP
      DELTAV = V1 - V(IA)
      IX    = 1
   40 CDP   = XINT1( V1,VELTO,10,CDDP ) 
      DRAG  = (CDG + CDP) * V1 * V1 * RHOA
      DELT  = DELTAV / ACO
      THRU  = ENGSCL
      DESP  = DELT*SPRT(ISEG)
      IF ( ABS(THRU-TTO) .GT. DESP .AND. DESP .GT. 0. ) THEN
         IF ( THRU .GT. TTO ) THRU = TTO + DESP
         IF ( THRU .LT. TTO ) THRU = TTO - DESP
      ENDIF
      TTOO  = THRU
      CALL ENINT (V1/SPDSND, APA, THRU, FF, 2, TMAX, ITD, IPCMAX)
      DCL   = XINT1( V1,VELTO,10,CLDPOC ) / CL 
      CLIFT = (CL + DCL) * RHOA * V1 * V1 + STINC * THRU
      CWT   = WT(IA) - DELT * (FF + FFO) * NE / 7200.
      ACC   = (THRU*CTINC - DRAG - ROLLMU * (CWT - CLIFT)) * G / CWT
  
C     TIME AND DISTANCE ARE CALCULATED FOR THE VELOCITY STEP

      DELT    = 2. * DELTAV / (ACC + ACO)
      IA      = IA + 1
      IF ( IA .GT. 100 .OR. ACC .LT. 0. ) GO TO 500
      T(IA)   = T(IA-1) + DELT
      D(IA)   = D(IA-1) + DELT * (V(IA-1) + (2.*ACO + ACC) * DELT / 6.)
      V(IA)   = V1
      ALT(IA) = 0.0
      GAM(IA) = 0.0
      ALP(IA) = ALPRUN
      FLAPA(IA) = DFLAP(IFP)
      IGR(IA) = 1
      CLL(IA) = CL + DCL
      CDD(IA) = CDG + CDP
      TH(IA)  = NE * THRU
      IF ( IPCMAX .GT. 1 )
     1 CALL ENINT (V1/SPDSND, APA, XTT, XFF, 1, TMAX, ITD, 1 )
      TTM(IA) = THRU / TMAX
      WT(IA)  = WT(IA-1) - DELT * (FF + FFO) * NE / 7200.
      FFO     = FF
      ACL(IA) = ACC
      ISTOP   = 0

C     CHECK FOR END OF SEGMENT

      DL      = 0.
      IF ( DSTOP .LE. 0. .OR. D(IA) .LT. DSTOP ) GO TO 50
      ISTOP   = 1
      DL      = (D(IA) - DSTOP) / (D(IA) - D(IA-1))

   50 IF ( TSTOP .LE. 0. .OR. T(IA) .LT. TSTOP ) GO TO 60
      ISTOP   = 1
      DLP     = (T(IA) - TSTOP) / (T(IA) - T(IA-1))
      DL      = MAX(DL,DLP)

   60 IF ( ISTOP .EQ. 0 ) GO TO 70
      D(IA)   = (1. - DL) * D(IA)   + DL * D(IA-1)
      T(IA)   = (1. - DL) * T(IA)   + DL * T(IA-1)
      V(IA)   = (1. - DL) * V(IA)   + DL * V(IA-1)
      WT(IA)  = (1. - DL) * WT(IA)  + DL * WT(IA-1)
      CLL(IA) = (1. - DL) * CLL(IA) + DL * CLL(IA-1)
      CDD(IA) = (1. - DL) * CDD(IA) + DL * CDD(IA-1)
      TH(IA)  = (1. - DL) * TH(IA)  + DL * TH(IA-1)
      TTM(IA) = (1. - DL) * TTM(IA) + DL * TTM(IA-1)
      ACL(IA) = (1. - DL) * ACL(IA) + DL * ACL(IA-1)
      TTO     = (1. - DL) * TTOO    + DL * TTO
      GO TO 80

   70 TTO     = TTOO
      IF ( IX .GT. 0 .OR. CLIFT .GT. CWT ) GO TO 80
      ACO     = ACC
      GO TO 30

C     CHECK FOR START OF ROTATION

   80 KA(ISEG) = IA
      IF ( IPRINT .GT. 0 ) WRITE(IU6, 630) KEY, T(IA), ALT(IA), D(IA),
     1   V(IA)/SPD, GAM(IA), ALP(IA), WT(IA), FLAPA(IA), CLL(IA),
     2   CLL(IA)/CDD(IA), FLOAT(IGR(IA)), TH(IA), ZERO, TTM(IA)
      ISEG    = ISEG + 1
      IF ( KEY .NE. 'ROTA' ) GO TO 20

C     INITIALIZE FOR START OF ROTATION

      VE     = V(IA)
      DE     = D(IA)
      TI     = T(IA)
      DELT   = T(IA) - T(IA-1)
      DACC   = 0.
      IF ( DELT .GT. .0001 ) DACC = (ACL(IA) - ACL(IA-1)) / DELT
      ACO    = ACL(IA)
      ALPOL  = ALPRUN
      DELT   = DELTRO
      ALPH1  = ALPRUN
      DELF   = 1.0
      IL     = 0
      IFP    = IFLP(ISEG)
      IF ( ENGSC(ISEG) .GT. 0. ) ENGSCL = ENGSC(ISEG)
  
C     ROTATION LOOP - ROTATE AT SPECIFIED RATE (VANGLE) AND
C     ESTIMATE VELOCITY AT THE END OF THE TIME STEP 

   90 DELTAL = VANGL * DELT
      ALPH1  = ALPH1 + DELTAL
      M      = 0
      DELTAV = DELT * (2.*ACO + DACC*DELT) / 2.
      IF ( ALPH1 .GT. ALFROT ) ALPH1 = ALFROT 
c     ohad 16/7/08 - 0.0d0 rather than 0.
c      CALL GEFECT ( ALPH1, 0., 0., ALPRO(1,IFP), CLPRO(1,IFP),
c     1     CDPRO(1,IFP), CDMTO, CL, CDG, ARRET*ARGEF, WHGT, SPAN )
      CALL GEFECT ( ALPH1, 0.0d0, 0.0d0, ALPRO(1,IFP), CLPRO(1,IFP),
     1     CDPRO(1,IFP), CDMTO, CL, CDG, ARRET*ARGEF, WHGT, SPAN )
  
C     LOOP TO CONVERGE VELOCITY AT THE END OF THE TIME STEP 
C     COMPUTE VERTICAL LIFT AND HORIZONTAL ACCELERATION

  100 V1     = VE + DELTAV
      CDP    = XINT1( V1,VELTO,10,CDDP )
      DRAG   = (CDG + CDGEAR + CDP) * RHOA * V1 ** 2
      THRU   = ENGSCL
      DESP   = DELT*SPRT(ISEG)
      IF ( ABS(THRU-TTO) .GT. DESP .AND. DESP .GT. 0. ) THEN
         IF ( THRU .GT. TTO ) THRU = TTO + DESP
         IF ( THRU .LT. TTO ) THRU = TTO - DESP
      ENDIF
      TTOO   = THRU
      CALL ENINT (V1/SPDSND, APA, THRU, FF, 2, TMAX, ITD, IPCMAX)
      CLP    = XINT1( V1,VELTO,10,CLDPOC )
      DCL    = CLP / CL
      DELTLP = ALPH1 - ALPRUN
      CLIFT  = (CL + DCL) * RHOA * V1 ** 2 + NE * SIN( (TINC +
     1          DELTLP) * RAD ) * THRU
      CWT    = WT(IA) - DELT * (FF + FFO) * NE / 7200.
      FRICT  = ROLLMU * (CWT - CLIFT)
      IF ( FRICT .LT. 0.0 ) FRICT = 0.0
      TNET   = THRU * NE * COS( (TINC + DELTLP) * RAD )
      FORC   = TNET - DRAG - FRICT
      ACC    = FORC * G / CWT
      DVO    = DELTAV
      IF ( DELT .GT. 0. ) DACC = (ACC - ACO) / DELT
      DELTAV = DELT * (ACO + ACC) / 2.
      IF ( IL .GT. 0 ) GO TO 110
      M      = M + 1
      IF ( ABS(DELTAV-DVO) .GT. .001 .AND. M .LT. 10 ) GO TO 100

      IF ( CLIFT .GT. CWT ) GO TO 110
      TI     = TI + DELT
      DE     = DE + DELT * (VE + (2. * ACO + ACC) * DELT / 6.)
      VE     = VE + DELTAV
      DELF   = CLIFT - CWT
      ACO    = ACC
      ALPOL  = ALPH1
      IA     = IA + 1
      IF ( IA .GT. 200 ) GO TO 500
      T(IA)   = TI
      D(IA)   = DE
      V(IA)   = VE
      ALT(IA) = 0.0
      GAM(IA) = 0.0
      WT(IA)  = CWT
      FLAPA(IA) = DFLAP(IFP)
      IGR(IA) = 1
      ALP(IA) = ALPH1
      TH(IA)  = THRU * NE
      IF ( IPCMAX .GT. 1 )
     1 CALL ENINT (VE/SPDSND, APA, XTT, XFF, 1, TMAX, ITD, 1 )
      TTM(IA) = THRU / TMAX
      WT(IA)  = WT(IA-1) - DELT * (FF + FFO) * NE / 7200.
      FFO     = FF
      TTO     = TTOO
      CLL(IA) = CL + DCL
      CDD(IA) = CDG + CDGEAR + CDP
      ACL(IA) = ACC
      GO TO 90

C     ITERATE UNTIL TIME OF LIFTOFF IS DETERMINED 
  110 IL      = IL + 1
      VIT(IL) = DELT
      DELFOR(IL) = CLIFT - CWT
      ALWR(IL)   = ALPH1
      HFOR(IL)   = FORC
  
C     IF THE NET FORCE = 0, LIFTOFF HAS OCCURRED
      IF ( ABS( DELFOR(IL) ) .LT. 0.00001 * GROSWT ) GO TO 150
      IF ( IL .GT. 1 ) GO TO 120
C     FIRST ITERATION 
      DELT = DELT * (1. - DELFOR(IL) / (DELFOR(IL) - DELF))
      IF ( DELT .LT. 0.0 ) DELT = 0.0
      GO TO 130
  
C     SUBSEQUENT ITERATIONS - LINEAR INTERPOLATION
  120 IF ( IL .GE. 10 ) GO TO 140
      DELT = VIT(IL) - (VIT(IL) - VIT(IL-1)) * DELFOR(IL) / 
     1                (DELFOR(IL) - DELFOR(IL-1)) 
      IF ( DELT .LE. 0.0 ) DELT = VIT(IL) / 2.0
      IF ( DELT .LE. 0.0 ) GO TO 150
      CHECK = DELFOR(IL)*DELFOR(IL-1)
C     TRY INTERVAL HALVING
      IF( IL.GT.5 .AND. CHECK.LT.0. ) DELT = (VIT(IL)+VIT(IL-1))/2.0
  130 ALPH1 = ALPOL
      GO TO 90
  140 IF ( ABS( VIT(IL) - VIT(IL-1) ) .LT. 0.001 ) GO TO 150
C     NO CONVERGENCE - PRINT DIAGNOSTIC DATA
      WRITE(IU6, 550) (IL, VIT(IL), DELFOR(IL), ALWR(IL), HFOR(IL),
     1                 IL = 1,10)

  150 DELTAV  = (ACC + ACO) * DELT / 2.0
      TLO     = TI + DELT
      DLO     = DE + DELT * (VE + (2. * ACO + ACC) * DELT / 6.)
      VLO     = VE + DELTAV
      ACO     = ACC
      IA      = IA + 1
      IF ( IA .GT. 300 ) GO TO 500
      T(IA)   = TLO
      D(IA)   = DLO
      V(IA)   = VLO
      ALT(IA) = 0.0
      GAM(IA) = 0.0
      WT(IA)  = CWT
      FLAPA(IA) = DFLAP(IFP)
      IGR(IA) = 1
      ALP(IA) = ALPH1
      TH(IA)  = THRU * NE
      IF ( IPCMAX .GT. 1 )
     1 CALL ENINT (VLO/SPDSND, APA, XTT, XFF, 1, TMAX, ITD, 1 )
      TTM(IA) = THRU / TMAX
      WT(IA)  = WT(IA-1) - DELT * (FF + FFO) * NE / 7200.
      FFO     = FF
      TTO     = TTOO
      CLL(IA) = CL + DCL
      CDD(IA) = CDG + CDGEAR + CDP
      ACL(IA) = ACC
      KA(ISEG) = IA
      KEY     = KEYS(ISEG)
      IF ( IPRINT .GT. 0 ) WRITE(IU6, 630) KEY, T(IA), ALT(IA), D(IA),
     1   V(IA)/SPD, GAM(IA), ALP(IA), WT(IA), FLAPA(IA), CLL(IA),
     2   CLL(IA)/CDD(IA), FLOAT(IGR(IA)), TH(IA), ZERO, TTM(IA)
  
C     COMPUTE TRAJECTORY FROM LIFTOFF UNTIL OBSTACLE HEIGHT IS REACHED 
  
      VVERT  = 0.0
      VHORZ  = VLO
      TI     = TLO
      DE     = DLO
      GAMO   = 0.0
      DELO   = 0.0
      HOO    = 0.0
      ACHO   = ACO
      ACVO   = 0.0
      DACV   = 0.0
      DGAM   = 0.0
      MAL    = 0
      IL     = 0
      HT     = 0.0
      DELT   = DELTCL
      GAMFLT = 0.0
      ISEG   = ISEG + 1
      KEY    = KEYS(ISEG)
      IF ( KEY .NE. 'OBST' ) THEN
         ISEG = ISEG - 1
         GO TO 250
      ENDIF
      IFP    = IFLP(ISEG)
      IF ( ENGSC(ISEG) .GT. 0. ) ENGSCL = ENGSC(ISEG)
      HSTOP  = HSTP(ISEG)
      IF ( HSTOP .LE. 0. ) HSTOP = OBSTO
  
C     INCREMENT TIME UNTIL ALTITUDE EXCEEDS OBSTACLE HEIGHT 

  160 DELTAV = DELT * (2.*ACO + DACC*DELT) / 2.
      IF ( DELTAV .LT. 0. ) DELTAV = 0.
      DELTAL = VANGL * DELT
      ALPOL  = ALPH1
      M      = 0

C     CONTINUE ROTATION LIMITED BY ALMXTO 
      ALPH1  = ALPH1 + DELTAL
  170 IF ( ALPH1 .GT. ALMXTO ) ALPH1 = ALMXTO
      GAMFLT = GAMO + DELT * DGAM
      DELTLP = ALPH1 - ALPRUN
      HO     = HT + DELT * (VVERT + DELT * (3.*ACVO + DELT*DACV) / 6. )
      CALL ATMO ( APA+HO, DTCT, DELTA, THETA, ASTAR, TM, RE, HFT )
      SPDSND = ASTAR * SPD
      RHOA    = 0.0023769 * SW * DELTA / THETA / 2.
      CALL GEFECT (ALPH1, HO, GAMFLT, ALPRO(1,IFP), CLPRO(1,IFP),
     1     CDPRO(1,IFP), CDMTO, CL, CDG, ARRET*ARGEF, WHGT, SPAN )
      V1     = VE + DELTAV
  
C     INCLUDE GEAR DRAG IF IT IS STILL DOWN 
      CDGR   = 0.0
      IF ( (TI + DELT - TLO) .LE. TIGEAR .AND. TIGEAR .GT. 0. )
     1 CDGR  = CDGEAR * COS( ((TI + DELT - TLO) / TIGEAR) * 90.0 * RAD )
      IGER   = 0
      IF ( CDGR .GT. 0. ) IGER = 1
      CDP    = XINT1( V1,VELTO,10,CDDP )
      DRAG   = (CDG + CDGR + CDP) * V1 ** 2 * RHOA
      CLP    = XINT1(V1,VELTO,10,CLDPOC)
      DCL    = CLP / CL
      CLIFT  = (CL + DCL) * V1 ** 2 * RHOA
      THRU   = ENGSCL
      DESP   = DELT*SPRT(ISEG)
      IF ( ABS(THRU-TTO) .GT. DESP .AND. DESP .GT. 0. ) THEN
         IF ( THRU .GT. TTO ) THRU = TTO + DESP
         IF ( THRU .LT. TTO ) THRU = TTO - DESP
      ENDIF
      TTOO   = THRU
      CALL ENINT (V1/SPDSND, APA+HO, THRU, FF, 2, TMAX, ITD, IPCMAX)
      CG     = COS( GAMFLT * RAD )
      SG     = SIN( GAMFLT * RAD )
      TNETH  = THRU * NE * COS( (TINC + DELTLP + GAMFLT) * RAD )
      TNETV  = THRU * NE * SIN( (TINC + DELTLP + GAMFLT) * RAD )
      FORCH  = TNETH - CLIFT * SG - DRAG * CG
      FORCV  = TNETV + CLIFT * CG - CWT - DRAG * SG
      CWT    = WT(IA) - DELT * (FF + FFO) * NE / 7200.
      ACCH   = FORCH * G / CWT
      ACCV   = FORCV * G / CWT
      DACV   = (ACCV - ACVO) / DELT
      HO     = HT + DELT * (VVERT + DELT * (2.0 * ACVO + ACCV) / 6.0 )
      TVERT  = VVERT + DELT * (ACVO + ACCV) / 2.0
      THORZ  = VHORZ + DELT * (ACHO + ACCH) / 2.0
      TV     = SQRT(TVERT**2 + THORZ**2)
      GAMFLT = ATAN(TVERT / THORZ) / RAD
      DGAM   = (GAMFLT - GAMO) / DELT
      ACC    = (ACCH * THORZ + ACCV * TVERT ) / TV
      DELTAV = TV - VE
      M      = M + 1
      IF ( M   .EQ. 1  ) GO TO 170
      IF ( MAL .GT. 0  ) GO TO 190
      IF ( ACC .GE. 0. ) GO TO 210 
  
C     IF FLIGHT PATH ACCELERATION IS NEGATIVE, REDUCE ALPHA 
C     AND ITERATE UNTIL ACCELERATION IS ZERO

      DAL    = -0.1
  180 MAL    = MAL + 1
      ALPO   = ALPH1
      ACACO  = ACC
      ALPH1  = ALPH1 + DAL
      DELTAV = DELT * ACO / 2.
      M      = 0
      GO TO 170
  190 IF ( ABS(ACC) .GT. 0.001 .AND. MAL .LT. 10 .AND. ACC .NE. ACACO ) 
     1  GO TO 200 
      MAL   = 0
      GO TO 210
  200 DAL   = -ACC * (ALPH1 - ALPO) / (ACC - ACACO)
      GO TO 180
  210 IF ( ABS(HO - HSTOP) .LT. 0.01 ) GO TO 230
      IF ( IL .GT. 0 ) GO TO 220 
      IF ( HO .LT. HSTOP ) GO TO 240
  
C     IF HEIGHT EXCEEDS OBSTACLE, ITERATE UNTIL EQUAL 
  220 DV    = (DELT - DELO) * (HO - HSTOP) / (HO - HOO)
      DELO  = DELT
      HOO   = HO
      DELT  = DELT - DV
      IF ( DELT .LT. 0.0    ) DELT = DELO / 2.0
      IF ( DELT .GT. DELTCL ) DELT = (DELTCL + DELO) / 2.0
      ALPH1 = ALPOL
      IL    = IL + 1
      IF ( IL .LT. 10 ) GO TO 160
  230 IL    = 10
  
  240 CONTINUE
      HT      = HO
      HOO     = HT
      DE      = DE + DELT * (VHORZ + (2.0 * ACHO + ACCH) * DELT / 6.0)
      VVERT   = TVERT
      VHORZ   = THORZ
      VE      = TV
      GAMO    = GAMFLT
      IF ( DELT .GT. 0. ) DACC = (ACC - ACO) / DELT
      ACO     = ACC 
      ACHO    = ACCH
      ACVO    = ACCV
      TI      = TI + DELT
      IA      = IA + 1
      IF ( IA .GT. 400 ) GO TO 500
      T(IA)   = TI
      D(IA)   = DE
      V(IA)   = VE
      ALP(IA) = ALPH1
      WT(IA)  = CWT
      FLAPA(IA) = DFLAP(IFP)
      IGR(IA) = IGER
      TH(IA)  = THRU * NE
      IF ( IPCMAX .GT. 1 )
     1 CALL ENINT (V1/SPDSND, APA+HT, XTT, XFF, 1, TMAX, ITD, 1 )
      TTM(IA) = THRU / TMAX
      WT(IA)  = WT(IA-1) - DELT * (FF + FFO) * NE / 7200.
      FFO     = FF
      TTO     = TTOO
      CLL(IA) = CL + DCL
      CDD(IA) = CDG + CDGR + CDP
      ALT(IA) = HT
      GAM(IA) = GAMFLT
      ACL(IA) = ACC
      IF ( IL .LT. 10 ) GO TO 160
  
C     OBSTACLE HAS BEEN REACHED
  
      KA(ISEG) = IA
      IF ( IPRINT .GT. 0 ) WRITE(IU6, 630) KEY, T(IA), ALT(IA), D(IA),
     1   V(IA)/SPD, GAM(IA), ALP(IA), WT(IA), FLAPA(IA), CLL(IA),
     2   CLL(IA)/CDD(IA), FLOAT(IGR(IA)), TH(IA), ZERO, TTM(IA)
      
C     POST-OBSTACLE CLIMB SEGMENTS

  250 ISEG   = ISEG + 1
      ICUT   = 0
      VE     = V(IA)
      DE     = D(IA)
      TI     = T(IA)
      ALPH1  = ALP(IA)
      GAMFLT = GAM(IA)
      VVERT  = VE * SIN(GAMFLT*RAD)
      VHORZ  = VE * COS(GAMFLT*RAD)
      HT     = ALT(IA)
      IFP    = IFLP(ISEG)
      DELT   = DLT(ISEG)
      VSTOP  = VSTP(ISEG) * SPD
      IF ( VSTP(ISEG) .GT. 0. .AND. VSTP(ISEG) .LE. 50. )
     1         VSTOP = MAX(VE,(VEE2+VSTP(ISEG))*SPD)
      DSTOP  = DSTP(ISEG)
      TSTOP  = TSTP(ISEG)
      HSTOP  = HSTP(ISEG)
      HMIN   = HMN(ISEG)
      KEY    = KEYS(ISEG)
      IF ( KEY .EQ. 'CUTB' ) GO TO 740
      IF ( ENGSC(ISEG) .GT. 0. ) ENGSCL = ENGSC(ISEG)

C     IFIX = 1, FIXED THRUST AND CONSTANT VELOCITY
C          = 2, FIXED THRUST AND CONSTANT FLIGHT PATH ANGLE
C          = 3, FIXED THRUST AND FIXED ANGLE OF ATTACK
C          = 4, FIXED VELOCITY AND CONSTANT FLIGHT PATH ANGLE
C          = 5, FIXED THRUST AND FIXED FLOOR ANGLE (ALPHA + GAMMA)

      GO TO ( 260, 270, 280, 285, 275, 500 ) IFX(ISEG)

  260 VFIX   = VFX(ISEG) * SPD
      IF ( VFX(ISEG) .LE. 50. ) VFIX = MAX(VE,(VEE2+VFX(ISEG))*SPD)
      IF ( VFX(ISEG) .LE.  0. ) VFIX = VE
      VE     = VFIX
      GO TO 290

  270 GFIX   = GFX(ISEG)
      IF ( GFIX .LE. 0. ) GFIX = GAMFLT
      GAMFLT = GFIX
      GO TO 290

  275 GFIX   = GFX(ISEG)
      IF ( GFIX .LE. 0. ) GFIX = GAMFLT + ALPH1
      GAMFLT = GFIX - ALPH1
      GO TO 290

  280 AFIX   = AFX(ISEG)
      IF ( AFIX .LE. 0. ) AFIX = ALPH1
      GO TO 290

  285 VFIX   = VFX(ISEG) * SPD
      IF ( VFX(ISEG) .LE. 50. ) VFIX = (VEE2 + VFX(ISEG)) * SPD
      IF ( VFX(ISEG) .LE.  0. ) VFIX = VE
      VE     = VFIX
      GFIX   = GFX(ISEG)
      IF ( GFIX .LE. 0. ) GFIX = GAMFLT
  287 GAMFLT = GFIX
      DELFO  = 0.
      ACCH   = 0.

  290 ISTOP  = 0
      IFIX   = IFX(ISEG)
      IF ( IFIX .EQ. 4 ) THEN
         GFIX   = GFX(ISEG)
         GAMFLT = GFIX
      ENDIF
      ALPOL  = ALPH1
  294 GAMP   = GFIX
      TVO    = V1
  295 M      = 0
      DELTAL = VANGL * DELT
      ALPAT  = ALPH1 + DELTAL
      ALPIT  = ALPH1 - DELTAL
      IF ( ALPAT .GT. ALMXTO ) ALPAT = ALMXTO
      IF ( ALPIT .LT. ALPMIN ) ALPIT = ALPMIN
      IF ( IFIX .EQ. 3 ) ALPH1 = AFIX

  300 IF ( ALPH1 .GT. ALPAT .AND. ICUT .EQ. 0 ) ALPH1 = ALPAT
      IF ( ALPH1 .LT. ALPIT .AND. ICUT .EQ. 0 ) ALPH1 = ALPIT
  305 DELTAV = DELT * ACC
      V1     = VE + DELTAV
      IF ( IFIX .EQ. 1 .OR. IFIX .EQ. 4 ) V1 = VFIX
      DELTLP = ALPH1 - ALPRUN
      HO     = HT + DELT * VVERT
      CALL ATMO ( APA+HO, DTCT, DELTA, THETA, ASTAR, TM, RE, HFT )
      SPDSND = ASTAR * SPD
      RHOA   = 0.0023769 * SW * DELTA / THETA / 2.
      CALL GEFECT (ALPH1, HO, GAMFLT, ALPRO(1,IFP), CLPRO(1,IFP),
     1     CDPRO(1,IFP), CDMTO, CL, CDG, ARRET*ARGEF, WHGT, SPAN )
  
C     INCLUDE GEAR DRAG IF IT IS STILL DOWN 
      CDGR   = 0.0
      IF ( (TI + DELT - TLO) .LE. TIGEAR .AND. TIGEAR .GT. 0. )
     1 CDGR  = CDGEAR * COS( ((TI + DELT - TLO) / TIGEAR) * 90.0 * RAD )
      IGER   = 0
      IF ( CDGR .GT. 0. ) IGER = 1
      CDP    = XINT1 ( V1, VELTO, 10, CDDP )
      CDEO   = 0.
      IF ( ICUT .EQ. 2 ) CDEO = CDEOUT
      DRAG   = (CDG + CDP + CDGR + CDEO) * V1**2 * RHOA
      CLP    = XINT1 ( V1, VELTO, 10, CLDPOC )
      DCL    = CLP / CL
      CLIFT  = (CL + DCL) * V1**2 * RHOA
      CG     = COS( GAMFLT * RAD )
      SG     = SIN( GAMFLT * RAD )
      IF ( IFIX .EQ. 4 ) GO TO 720

      THRU   = ENGSCL
      DESP   = DELT*SPRT(ISEG)
      IF ( ABS(THRU-TTO) .GT. DESP .AND. DESP .GT. 0. ) THEN
         IF ( THRU .GT. TTO ) THRU = TTO + DESP
         IF ( THRU .LT. TTO ) THRU = TTO - DESP
      ENDIF
      TTOO   = THRU
      CALL ENINT ( V1/SPDSND, APA+HO, THRU, FF, 2, TMAX, ITD, IPCMAX )
      CWT    = WT(IA) - DELT * (FF + FFO) * NE / 7200.
      TNETH  = THRU * NE * COS( (TINC + DELTLP + GAMFLT) * RAD )
      TNETV  = THRU * NE * SIN( (TINC + DELTLP + GAMFLT) * RAD )
      FORCH  = TNETH - CLIFT * SG - DRAG * CG
      FORCV  = TNETV + CLIFT * CG - CWT - DRAG * SG
      ACCH   = FORCH * G / CWT
      ACCV   = FORCV * G / CWT
      HO     = HT + DELT * (VVERT + DELT * ACCV / 2.0 )
      TVERT  = VVERT + DELT * ACCV
      THORZ  = VHORZ + DELT * ACCH
      TV     = SQRT(TVERT**2 + THORZ**2)
      GAMFLT = ATAN(TVERT / THORZ) / RAD
      ACC    = (ACCH * THORZ + ACCV * TVERT ) / TV
      M      = M + 1
      IF ( (M - 2*(M/2)) .GT. 0 ) GO TO 300

      IF ( IFIX .EQ. 2 ) GO TO 310
      IF ( IFIX .EQ. 5 ) GO TO 315
      IF ( IFIX .EQ. 1 ) GO TO 308
      IF ( GAMFLT .GE. GAMLIM ) GO TO 320
      GFIX   = GAMLIM
  307 ISTOP  = 0
      IFIX   = 2
      GAMFLT = GFIX
      ALPH1  = ALP(IA)
      ALPOL  = ALPH1
      GO TO 294

  308 ERRMOD  = VFIX - TV
      IF ( ACC .GT. 0.1 ) ERRMOD  = ERRMOD - ACC*DELT/2.
      IF ( ABS(ERRMOD) .LE. .001 ) GO TO 309
      IF ( TV .GT. VFIX .AND. ALPH1 .GE. ALPAT ) GO TO 309
      IF ( TV .LT. VFIX .AND. ALPH1 .LE. ALPIT ) GO TO 309
      DELTAL  = SIGN (VANGL*DELT/10, -ERRMOD)
      DTV     = TV - TVO 
      DTEST   = DTV * (ALPH1-ALPOL)
      IF ( M .GT. 2 .AND. ABS(DTV) .GT. .001 .AND. DTEST .LT. 0. ) 
     1 DELTAL = ERRMOD * (ALPH1-ALPOL) / DTV 
      ALPOL   = ALPH1 
      TVO     = TV 
      ALPH1   = ALPH1 + DELTAL
      IF ( M .LT. 20) GO TO 300
  309 GAMT    = 0.5 * (GAM(IA) - GAMLIM)
      IF ( GAM(IA)-GAMFLT .GT. GAMT .AND. GAMT .GT. 0.1 ) THEN
         GFIX = GAM(IA) - GAMT
         GO TO 307
      ELSE IF ( GAMFLT .LT. GAMLIM ) THEN
         GFIX = GAMLIM
         GO TO 307
      ENDIF
      GO TO 320

  310 IF ( ABS(GAMFLT-GFIX) .LE. .001 ) GO TO 320
      IF ( GAMFLT .LT. GFIX .AND. ALPH1 .GE. ALPAT ) GO TO 320
      IF ( GAMFLT .GT. GFIX .AND. ALPH1 .LE. ALPIT ) GO TO 320
      DELTAL  = SIGN (.1,(GFIX-GAMFLT))
      DGM     = GAMFLT - GAMP
      IF ( M .GT. 2 .AND. ABS(DGM) .GT. .001 )
     1 DELTAL = (GFIX-GAMFLT) * (ALPH1-ALPOL) / DGM
      ALPOL   = ALPH1
      GAMP    = GAMFLT
      ALPH1   = ALPH1 + DELTAL
      IF ( M .LT. 20) GO TO 300
      GO TO 320

  315 GAMFLO  = GAMFLT + ALPH1
      IF ( ABS(GAMFLO-GFIX) .LE. .001 ) GO TO 320
      IF ( GAMFLO .LT. GFIX .AND. ALPH1 .GE. ALPAT ) GO TO 320
      IF ( GAMFLO .GT. GFIX .AND. ALPH1 .LE. ALPIT ) GO TO 320
      DELTAL  = SIGN (.1D0,(GFIX-GAMFLO))
      DGM     = GAMFLO - GAMP
      IF ( M .GT. 2 .AND. ABS(DGM) .GT. .001 )
     1 DELTAL = (GFIX-GAMFLO) * (ALPH1-ALPOL) / DGM
      ALPOL   = ALPH1
      GAMP    = GAMFLO
      ALPH1   = ALPH1 + DELTAL
      IF ( M .LT. 20) GO TO 300
      GO TO 320

  720 ALPNU   = (DELTLP + TINC) * RAD
      CWT     = WT(IA) - DELT * FFO * NE / 3600.
      SAU     = SIN(ALPNU)
      CAU     = COS(ALPNU)
      FH      = DRAG + CWT * SG
      FV      = CWT * CG - CLIFT
      DELFF   = FH * SAU - FV * CAU
      M       = M + 1
      IF ( ABS(DELFF) .LT. .00001*GROSWT .OR. M .GE. 20 ) GO TO 730
      DELA    = - SIGN(.1D0,DELFF)
      DDELF   = DELFF - DELFO
      IF ( M .GT. 1 .AND. ABS(DDELF) .GT. 1. )
     1   DELA = DELFF * (ALPO - ALPH1) / DDELF 
      IF ( ABS(DELA) .GT. 1. ) DELA = SIGN(1.D0,DELA)
      IF ( ABS(DELA) .LT. .0001 ) GO TO 730
      ALPO    = ALPH1
      DELFO   = DELFF
      ALPH1   = ALPH1 + DELA
      GO TO 305

  730 THRU    = (FH/CAU + FV/SAU) / (2. * NE)
      IF ( ICUT .GT. 0 ) GO TO 750
      CALL ENINT (V1/SPDSND, APA+HO, THRU, FF, 2, TMAX, ITD, IPCMAX)
      ENGSCL  = THRU / TMAX
      DESP    = DELT*SPRT(ISEG)
      IF ( ( ABS(ENGSCL-TTO) .LT. DESP .OR. DESP .LE. 0. ) .AND.
     1     ( THRU .LE. TMAX ) ) THEN
        IF ( ALPH1 .LT. ALPIT ) THEN
           ALPH1 = ALPIT
           IFIX = 3
           GO TO 305
        ELSE IF ( ALPH1 .GT. ALPAT ) THEN
           ALPH1 = ALPAT
           IFIX = 3
           GO TO 305
        ENDIF
        TV    = V1
        ACC   = (TV - TVO) / DELT
        TVERT = TV * SG
        THORZ = TV * CG
        ACCV  = (TVERT - VVERT) / DELT
        ACCH  = (THORZ - VHORZ) / DELT
        HO    = HT + DELT * (VVERT + DELT * ACCV / 2.0 )
        TVO   = TV
        GO TO 320
      ELSE
        IFIX  = 1
        ALPH1 = ALPOL
        GO TO 295
      ENDIF

  740 IFX(ISEG) = 4
      GFX(ISEG) = GRAEO(ISEG)
      VFIX  = VE
      ICUT  = 1
      DELT  = 0.
      GO TO 287
  750 IF ( ICUT .EQ. 2 ) GO TO 760
      TREQ1 = THRU
      TREQ2 = 0.
      GFX(ISEG) = GROEO(ISEG)
      IF ( NE .GT. 1 ) THEN
         ICUT = 2
         GO TO 287
      ENDIF
  760 IF ( NE .GT. 1 ) TREQ2 = NE * THRU / (NE - 1)
      TREQ   = MAX(TREQ1,TREQ2)
      CALL ENINT (VE/SPDSND, APA+HO, TT, FF, 1, TMAX, ITD, IPCMAX)
      ENGSCL = TREQ / TMAX
      IF ( TMAX .LT. TREQ ) THEN
         IF ( IPRINT .GT. 0 ) WRITE(IU6, 790)
  790    FORMAT (/' INSUFFICIENT THRUST AVAILABLE AT CUTBACK')
         IF ( IPCMAX .EQ. 1 ) ENGSC(ISEG+1) = 1.
      ENDIF
      IF ( IPRINT .GT. 0 ) WRITE(IU6, 810) ENGSCL, TREQ1, TREQ2
  810 FORMAT ( '  CUTBACK SEGMENT - NEW ENGINE SETTING =',F8.5,
     1         ',  THRUST REQUIRED =',F9.1,' (AEO)  OR',F9.1,' (OEO)')
      GO TO 250

  320 HT      = HO
      DE      = DE + DELT * (VHORZ + ACCH * DELT / 2.0)
      VVERT   = TVERT
      VHORZ   = THORZ
      VE      = TV
      TI      = TI + DELT
      IA      = IA + 1
      IF ( IA .GT. 500 ) GO TO 500
      T(IA)   = TI
      D(IA)   = DE
      V(IA)   = VE
      ALP(IA) = ALPH1
      WT(IA)  = CWT
      FLAPA(IA) = DFLAP(IFP)
      IGR(IA) = IGER
      TH(IA)  = THRU * NE
      IF ( IPCMAX .GT. 1 )
     1 CALL ENINT (VE/SPDSND, APA+HO, XTT, XFF, 1, TMAX, ITD, 1 )
      TTM(IA) = THRU / TMAX
      WT(IA)  = WT(IA-1) - DELT * (FF + FFO) * NE / 7200.
      FFO     = FF
      CLL(IA) = CL + DCL
      CDD(IA) = CDG + CDGR + CDP
      ALT(IA) = HT
      GAM(IA) = GAMFLT
      ACL(IA) = ACC

C     CHECK FOR END OF SEGMENT

      DL      = 0.
      IF ( HSTOP .LE. 0. .OR. ALT(IA) .LT. HSTOP ) GO TO 330
      DL      = (ALT(IA) - HSTOP) / (ALT(IA) - ALT(IA-1))
      ISTOP   = 1

  330 IF ( DSTOP .LE. 0. .OR. D(IA) .LT. DSTOP ) GO TO 340
      IF ( ALT(IA) .GE. HMIN .OR. HMIN .LE. 0. ) GO TO 335
      HSTOP   = HMIN
      DSTOP   = DSTOP * 10.
      GO TO 340
  335 DLP     = (D(IA) - DSTOP) / (D(IA) - D(IA-1))
      DL      = MAX(DL,DLP)
      ISTOP   = 1

  340 IF ( TSTOP .LE. 0. .OR. T(IA) .LT. TSTOP ) GO TO 350
      IF ( ALT(IA) .GE. HMIN .OR. HMIN .LE. 0. ) GO TO 345
      HSTOP   = HMIN
      TSTOP   = TSTOP * 10.
      GO TO 350
  345 DLP     = (T(IA) - TSTOP) / (T(IA) - T(IA-1))
      DL      = MAX(DL,DLP)
      ISTOP   = 1

  350 IF ( VSTOP .LE. 0. .OR. V(IA) .LT. VSTOP ) GO TO 360
      IF ( ALT(IA) .GE. HMIN .OR. HMIN .LE. 0. ) GO TO 355
      HSTOP   = HMIN
      VSTOP   = VSTOP * 10.
      GO TO 360
  355 DLP     = (V(IA) - VSTOP) / (V(IA) - V(IA-1))
      DL      = MAX(DL,DLP)
      ISTOP   = 1

  360 IF ( ISTOP .EQ. 0 ) THEN
         TTO  = TTOO
         GO TO 290
      ENDIF
      V(IA)   = (1. - DL) * V(IA)   + DL * V(IA-1)
      T(IA)   = (1. - DL) * T(IA)   + DL * T(IA-1)
      D(IA)   = (1. - DL) * D(IA)   + DL * D(IA-1)
      ALT(IA) = (1. - DL) * ALT(IA) + DL * ALT(IA-1)
      WT(IA)  = (1. - DL) * WT(IA)  + DL * WT(IA-1)
      ALP(IA) = (1. - DL) * ALP(IA) + DL * ALP(IA-1)
      GAM(IA) = (1. - DL) * GAM(IA) + DL * GAM(IA-1)
      CLL(IA) = (1. - DL) * CLL(IA) + DL * CLL(IA-1)
      CDD(IA) = (1. - DL) * CDD(IA) + DL * CDD(IA-1)
      TH(IA)  = (1. - DL) * TH(IA)  + DL * TH(IA-1)
      TTM(IA) = (1. - DL) * TTM(IA) + DL * TTM(IA-1)
      ACL(IA) = (1. - DL) * ACL(IA) + DL * ACL(IA-1)
      TTO     = (1. - DL) * TTOO    + DL * TTO
      KA(ISEG) = IA
      IF ( IPRINT .GT. 0 ) WRITE(IU6, 630) KEY, T(IA), ALT(IA), D(IA),
     1   V(IA)/SPD, GAM(IA), ALP(IA), WT(IA), FLAPA(IA), CLL(IA),
     2   CLL(IA)/CDD(IA), FLOAT(IGR(IA)), TH(IA), ZERO, TTM(IA)
      
      IF ( KEY .EQ. 'CHAN' ) GO TO 250

C     OUTPUT DETAILED RESULTS

  510 IF ( NTIME .NE. 1 .OR. IPRINT .LE. 0 ) GO TO 610
      WRITE(IU6, 570)
  570 FORMAT (/'  COUNT   TIME   HEIGHT  DISTANCE   SPEED   GAMMA',
     1 '   ALPHA    WEIGHT  FLAPS      CL     L/D   EGEAR    THRUST',
     2 '   VJET   T/TMAX' )
      I1  = 1
      DO 600 N = 1,NSEG
      IF ( KEYS(N) .EQ. 'CUTB' ) GO TO 600
      I2  = KA(N)
      WRITE(IU6, 580)
  580 FORMAT (5X)
      WRITE(IU6, 590) (I, T(I), ALT(I), D(I), V(I)/SPD, GAM(I), ALP(I),
     1                WT(I), FLAPA(I), CLL(I), CLL(I)/CDD(I),
     2                FLOAT(IGR(I)), TH(I), ZERO, TTM(I), I = I1,I2)
  590 FORMAT (I6,F8.2,F9.2,F10.1,3F8.2,F10.0,F7.1,F9.4,F8.2,F7.1,F10.1,
     1 F7.1,F9.4)
      I1  = I2 + 1
  600 CONTINUE

  630 FORMAT (2X,A4,F8.2,F9.2,F10.1,3F8.2,F10.0,F7.1,F9.4,F8.2,F7.1,
     1 F10.1,F7.1,F9.4)

  610 IF ( NPFILE .NE. 1 ) RETURN
      WRITE(IU9, 590) (I, T(I), ALT(I), D(I), V(I)/SPD, GAM(I), ALP(I),
     1                WT(I), FLAPA(I), CLL(I), CLL(I)/CDD(I),
     2                FLOAT(IGR(I)), TH(I), ZERO, TTM(I), I = 1,IA)
      IF ( IXFL .EQ. 1 ) RETURN
      I   = IA
      N   = 999
      WRITE(IU9, 590) N, T(I), ALT(I), D(I), V(I)/SPD, GAM(I), ALP(I),
     1                WT(I), FLAPA(I), CLL(I), CLL(I)/CDD(I),
     2                FLOAT(IGR(I)), TH(I), ZERO, TTM(I)

      RETURN

  500 WRITE(IU6, 505)
  505 FORMAT (/' * * FAILURE IN DETAILED TAKEOFF AND CLIMBOUT,',
     1         ' PROFILE CALCULATIONS TERMINATED * *')
      GO TO 510

  550 FORMAT ('  * * ITERATION OF LIFTOFF VELOCITY IS INCOMPLETE * *',/
     1(I5,6H DELT=,F7.3,8H DELFOR=,F10.2,7H ALPHA=,F7.3,6H HFOR=,F9.2))

      END
