C*************************************************************************
C MAP_STEEL_TTT_CCT_LINEAR
C
C Written by Teruhisa Okumara and Mathew Peet
C Based on  MAP_STEEL_TTT_CCT by S J Jones and H K D H Bhadeshia
C
C Program reads in isothermal transformation times,
C and outputs times for transformation to begin at different
C LINEAR cooling rates. 
C
C To produce CCT curves, the input is 
C
C
C
C Original program was for Weld Cooling
C
C Add switch for if continous cooling rate is imposed or interested in welding
C Also add a input for rate
C
C
C**************************************************************************
C MAP_STEEL_TTT_CCT_EX
C
C TEST PROGRAM TO CALCULATE CCT FROM TTT
C
C WARNING INPUT TTT MUST START AT HIGHEST TEMPERATURE - NOT THE LOWEST
C
C COPYRIGHT S J JONES & H K D H BHADESHIA
C           DEPT OF MATERIALS SCIENCE & METALLURGY
C           UNIVERSITY OF CAMBRIDGE
C           UNITED KINGDOM
C           JANUARY 1996
C**************************************************************************
C
      PROGRAM MAP_STEEL_TTT_CCT_LINEAR
      IMPLICIT NONE
C     
      DOUBLE PRECISION TITTT(1000),TMTTT(1000),
     &     TMCCT(300),TICCT(300),RATE(1000),TTIME(1000)
      DOUBLE PRECISION THEQU,PAE3,MS
      INTEGER IINFORM,IPAIRS,ITTTPT,ICCTPT,
     &     I10,I20
C     
      READ(*,*) IINFORM,IPAIRS,THEQU,PAE3,MS
C ISWITCH unused
C
      DO 10 I10=1,IPAIRS,1
         READ(*,*) TMTTT(I10),TITTT(I10)
 10   CONTINUE
      CALL MAP_STEEL_TTT_TO_CCT(IINFORM,IPAIRS,THEQU,PAE3,MS,
     &     TITTT,TMTTT,ITTTPT,TTIME,RATE,ICCTPT,TICCT,
     &     TMCCT) 
       
      WRITE(*,*) "RATE  |  TMCCT  |    TICCT    |"
      DO 20 I20=1,30,1
         WRITE(*,30) RATE(I20),TMCCT(I20),TICCT(I20)
 20   CONTINUE
 30   FORMAT(E9.3,4X,F6.1,4X,E10.4)
      STOP
      END
      
C**************************************************************************
C     WARNING SUBROUTINE HAS BEEN MODIFIED AND DIFFERS FROM MAP_STEEL_TTT_CCT
C
C
C     SUBROUTINE TO CALCULATE CCT FROM TTT
C
C   XX  USING SIMULATED WELD COOLING CURVES XX
C     WARNING INPUT TTT MUST START AT HIGHEST TEMPERATURE - NOT THE LOWEST
C      
C     IINFORM=1 INPUT TTT CURVE POINTS WITH 20 DEGC INTERVALS (MUCG46.F)
C     IINFORM=2 INPUT TTT CURVE POINTS WITH 1 DEGC INTERVALS (OTHER SMALL
C     INTERVALS SHOULD BE OK - BUT USE WITH CARE)
C      
C     INPUT TTT POINTS ARE AT 20 DEGC INTERVALS - AS GENERATED BY THE TTT
C     MODEL "MUCG46.F" BY HKDB BHADESHIA ET AL. THEREFORE NEED TO INTERPOLATE
C     A TTT CURVE WITH 1 DEGC INTERVALS.
      
C     TTT TO CCT CONVERSION PROCEDURE:
C     OUTER LOOP - ARRANGE COOLING RATE "MODEL" - REDUCE CALCULTION.  
C     MIDDLE LOOP - VARY COOLING RATE.
C     INNER LOOPWILL - SCHEILS ADDITIVE REACTION RULE -  FOR COOLING CURVE.
      
C     TMTTT,TITTT=INPUT TTT CURVE, IPAIRS=NO POINTS
C     TTEMP,TTIME=CALCULATED (FULL - INTERPOLATION) TTT CURVE, ITTTPT=NO POINTS
C     TMCCT,TICCT=CALCULATED CCT CURVE, ICCTPT=NO POINTS
      
      SUBROUTINE MAP_STEEL_TTT_TO_CCT(IINFORM,IPAIRS,THEQU,PAE3,MS,
     &     TITTT,TMTTT,ITTTPT,TTIME,RATE,ICCTPT,TICCT,
     &     TMCCT)
      IMPLICIT NONE
      DOUBLE PRECISION TITTT(1000),TMTTT(1000),
     &     TMCCT(1000),TICCT(1000),RATE(1000),TTIME(1000)
      DOUBLE PRECISION THEQU,PAE3,MS,TEMP,PRETEMP
      DOUBLE PRECISION ANUM,BNUM,CONS,AVAL,BVAL,DELTA,
     &     C1,C2,A2,A3,AFAC,BFAC,STARTEFFHT,NEW1EFFHT,PRE2EFFHT,
     &     NEW2EFFHT,EFFHT,SUM,PREEFFHT,TINTV,FRAC,PRESUM,
     &     RTEMP,CONA,CONB,REAST,CR,TIME,TOTTIME
      INTEGER IINFORM,IPAIRS,ITTTPT,ICCTPT,
     &     IBEGIN,IELOOP,IENDL,IPLONE,I35
      INTEGER I1,I2,J5,J7,J10,J20,J30,J40,J60,J70,J80

      DO 1 I1=1,25
       CR=1.0E1**((I1-20.0)/4.0) 
     
       TIME=0.0
       SUM=0.0
       TOTTIME=0.0

      DO 2 I2=1,1000,1
         TOTTIME=TOTTIME+TIME
       IF (I2.EQ.1) THEN
         TIME=(PAE3-TMTTT(I2))/CR
       ELSE
         TIME=(TMTTT(I2-1)-TMTTT(I2))/CR
       ENDIF
         PRESUM=SUM
         SUM=SUM+TIME/TITTT(I2)

       IF (SUM.GE.1.0) GOTO 3
       IF (I2.EQ.1000) GOTO 1
 2     CONTINUE
 3       TICCT(I1)=TOTTIME+TIME*((1.0-PRESUM)/(SUM-PRESUM))
         TMCCT(I1)=PAE3-CR*TICCT(I1) 
         RATE(I1)=CR
 4     IINFORM=I1-1
 1     CONTINUE
      
      END
      
C*****************************************************************************

