aboutsummaryrefslogtreecommitdiff
path: root/synthe/rschwenk.for
diff options
context:
space:
mode:
Diffstat (limited to 'synthe/rschwenk.for')
-rw-r--r--synthe/rschwenk.for222
1 files changed, 222 insertions, 0 deletions
diff --git a/synthe/rschwenk.for b/synthe/rschwenk.for
new file mode 100644
index 0000000..0cc0665
--- /dev/null
+++ b/synthe/rschwenk.for
@@ -0,0 +1,222 @@
+ PROGRAM RTIOSCHWENKE
+C READS PACKED BINARY VERSION OF SCHWENKE'S TIO LINELIST
+C THROWS AWAY LEVEL INFORMATION IF LINOUT < 0
+ PARAMETER (kw=99)
+ REAL*4 XJTIO(269300)
+ REAL*8 ETIO(269300,5),STATETIO(269300,5)
+ COMMON /LINDAT/WL,E,EP,LABEL(2),LABELP(2),OTHER1(2),OTHER2(2),
+ 1 WLVAC,CENTER,CONCEN, NELION,GAMMAR,GAMMAS,GAMMAW,REF,
+ 2 NBLO,NBUP,ISO1,X1,ISO2,X2,GFLOG,XJ,XJP,CODE,ELO,GF,GS,GR,GW,
+ 3 DWL,DGFLOG,DGAMMAR,DGAMMAS,DGAMMAW,DWLISO,ISOSHIFT,EXTRA3
+ REAL*8 LINDAT8(14)
+ REAL*4 LINDAT4(28)
+ EQUIVALENCE (LINDAT8(1),WL),(LINDAT4(1),NELION)
+ REAL*8 WL,E,EP,WLVAC,CENTER,CONCEN
+ REAL*8 LABEL,LABELP,OTHER1,OTHER2,LABELISO(5)
+ CHARACTER*10 COTHER1,COTHER2
+ EQUIVALENCE (COTHER1,OTHER1(1)),(COTHER2,OTHER2(1))
+ INTEGER TYPE
+ EQUIVALENCE (GF,G,CGF),(TYPE,NLAST)
+ REAL*8 RESOLU,RATIO,RATIOLG,WLBEG,WLEND,RATIOLOG
+ REAL*4 DECKJ(7,kw),XISO(5),X2ISO(5)
+ REAL*4 TABLOG(32768),AIRSHIFT(60000)
+ INTEGER*2 IELION,IELO,IGFLOG,IGR,IGS,IGW
+ COMMON /IIIIIII/IWL,IELION,IELO,IGFLOG,IGR,IGS,IGW
+ INTEGER*4 IIIIIII(4)
+ EQUIVALENCE (IIIIIII(1),IWL)
+ BYTE IIBYTE(16),ONEBYTE
+ EQUIVALENCE (IIIIIII(1),IIBYTE(1))
+C 46TiO 47TiO 48TiO 49TiO 50TiO
+ DATA XISO/.0793,.0728,.7394,.0551,.0534/
+ DATA X2ISO/-1.101,-1.138,-0.131,-1.259,-1.272/
+ DATA LABELISO/2H46,2H47,2H48,2H49,2H50/
+C
+ data alpha/0./
+ DO 1 I=1,32768
+ 1 TABLOG(I)=10.**((I-16384)*.001)
+ IF(IFPRED.NE.1)CALL TABVACAIR(AIRSHIFT)
+ RATIOLOG=LOG(1.D0+1.D0/2000000.D0)
+ OPEN(UNIT=11,STATUS='OLD',READONLY,SHARED,FORM='UNFORMATTED',
+ 1RECORDTYPE='FIXED',BLOCKSIZE=8000,RECORDSIZE=4,ACCESS='DIRECT')
+ OPEN(UNIT=12,TYPE='OLD',FORM='UNFORMATTED',ACCESS='APPEND')
+ OPEN(UNIT=14,TYPE='OLD',FORM='UNFORMATTED',ACCESS='APPEND')
+ READ(93)NLINES,LENGTH,IFVAC,IFNLTE,N19,TURBV,DECKJ,IFPRED,
+ 1WLBEG,WLEND,RESOLU,RATIO,RATIOLG,CUTOFF,LINOUT
+ IXWLBEG=DLOG(WLBEG)/RATIOLG
+ IF(DEXP(IXWLBEG*RATIOLG).LT.WLBEG)IXWLBEG=IXWLBEG+1
+C
+ open(unit=48,type='old',form='unformatted',readonly)
+ READ(48)ETIO,XJTIO,STATETIO
+ CLOSE(UNIT=48)
+ N14=0
+ NBLO=0
+ NBUP=0
+ OTHER1(1)=(8H )
+ OTHER1(2)=(2H )
+ OTHER2(1)=(8H )
+ OTHER2(2)=(2H )
+ LABEL(2)=(2H )
+ LABELP(2)=(2H )
+ REF=(4HSCHW)
+ ISO1=16
+ X1=0.
+ CODE=822.
+ DWL=0.
+ DGFLOG=0.
+ DGAMMAR=0.
+ DGAMMAS=0.
+ DGAMMAW=0.
+ DWLISO=0.
+ ISOSHIFT=0
+C
+cc ISTART=DLOG(WLBEG-1.)/RATIOLOG+.5
+cc ISTOP=DLOG(WLEND+1.)/RATIOLOG+.5
+ ISTART=DLOG(WLBEG)/RATIOLOG+.5
+ ISTOP=DLOG(WLEND)/RATIOLOG+.5
+ N=0
+ READ(11,REC=1)IWL1
+ IF(IWL1.GT.ISTOP)GO TO 21
+C FIND NUMBER OF LINES
+ LIMITBLUE=1
+ LIMITRED=50000000
+ 8 NEWLIMIT=(LIMITRED+LIMITBLUE)/2
+ READ(11,REC=NEWLIMIT,ERR=9)IWL
+ LIMITBLUE=NEWLIMIT
+ IF(LIMITRED-LIMITBLUE.EQ.1)GO TO 11
+ GO TO 8
+ 9 LIMITRED=NEWLIMIT
+ IF(LIMITRED-LIMITBLUE.EQ.1)GO TO 11
+ GO TO 8
+ 11 LENGTHFILE=LIMITBLUE
+ WLVAC=EXP(IWL1*RATIOLOG)
+ PRINT 3334,IWL1,WLVAC
+ 3334 FORMAT(' FIRST LINE IS 1',' IWL',I10,' WL',F12.4)
+ READ(11,REC=LENGTHFILE)IWL
+ WLVAC=EXP(IWL*RATIOLOG)
+ PRINT 3335,LENGTHFILE,IWL,WLVAC
+ 3335 FORMAT(' LAST LINE IS ',I9,' IWL',I10,' WL',F12.4)
+ IF(IWL.LT.ISTART)GO TO 21
+C FIND THE FIRST LINE AFTER ISTART
+ LIMITBLUE=1
+ LIMITRED=LENGTHFILE
+ 12 NEWLIMIT=(LIMITRED+LIMITBLUE)/2
+ PRINT 3333,LIMITBLUE,NEWLIMIT,LIMITRED
+ 3333 FORMAT(3I10)
+ READ(11,REC=NEWLIMIT)IWL
+C IF COMPUTER REQUIRES BYTE ROTATION
+C DO 17 I=1,4,2
+C ONEBYTE=IIBYTE(I)
+C IIBYTE(I)=IIBYTE(I+1)
+C 17 IIBYTE(I+1)=ONEBYTE
+C ONEBYTE=IIBYTE(1)
+C IIBYTE(1)=IIBYTE(3)
+C IIBYTE(3)=ONEBYTE
+C ONEBYTE=IIBYTE(2)
+C IIBYTE(2)=IIBYTE(4)
+C IIBYTE(4)=ONEBYTE
+ IF(IWL.LT.ISTART)GO TO 13
+ LIMITRED=NEWLIMIT
+ IF(LIMITRED-LIMITBLUE.LE.1)GO TO 14
+ GO TO 12
+ 13 LIMITBLUE=NEWLIMIT
+ IF(LIMITRED-LIMITBLUE.LE.1)GO TO 14
+ GO TO 12
+ 14 ISTART=NEWLIMIT
+ PRINT 3333,LIMITBLUE,LIMITRED,NEWLIMIT
+ WRITE(6,6)ISTART
+ 6 FORMAT(I10,14H IS FIRST LINE)
+ DO 20 ILINE=ISTART,LENGTHFILE
+ READ(11,REC=ILINE)IIIIIII
+C IF COMPUTER REQUIRES BYTE ROTATION
+C DO 18 I=1,16,2
+C ONEBYTE=IIBYTE(I)
+C IIBYTE(I)=IIBYTE(I+1)
+C 18 IIBYTE(I+1)=ONEBYTE
+C ONEBYTE=IIBYTE(1)
+C IIBYTE(1)=IIBYTE(3)
+C IIBYTE(3)=ONEBYTE
+C ONEBYTE=IIBYTE(2)
+C IIBYTE(2)=IIBYTE(4)
+C IIBYTE(4)=ONEBYTE
+ IF(IWL.GT.ISTOP)GO TO 21
+ ISO=ABS(IELION)-8949
+ ISO2=ISO+45
+ X2=X2ISO(ISO)
+C NELIONNEW=ABS(IELION)/10
+C NELION=NELIONOLD(NELIONNEW)
+C IF(NELION.EQ.0)GO TO 20
+ NELION=366
+ WLVAC=EXP(IWL*RATIOLOG)
+ KWL=WLVAC*10.+.5
+ WL=WLVAC+AIRSHIFT(KWL)
+ IF(IFVAC.NE.1)WLVAC=WL
+ ELO=TABLOG(IELO)
+ IXWL=DLOG(WLVAC)/RATIOLG+.5D0
+ NBUFF=IXWL-IXWLBEG+1
+ FREQ=2.99792458E17/WLVAC
+ CONGF=.01502*TABLOG(IGFLOG)/FREQ*XISO(ISO)
+ FRQ4PI=FREQ*12.5664
+ KGW=IGW
+ KGS=IGS
+ LEVELLO=KGS*10+MOD(ABS(KGW),10)
+ LEVELUP=KGW/10+LEVELLO
+C GAMMAS=0
+C LOG GAMMAW=-7
+ IGS=1
+ IGW=9384
+ GAMRF=TABLOG(IGR)/FRQ4PI
+ GAMSF=TABLOG(IGS)/FRQ4PI
+ GAMWF=TABLOG(IGW)/FRQ4PI
+ WRITE(12)NBUFF,CONGF,NELION,ELO,GAMRF,GAMSF,GAMWF,alpha
+ NLINES=NLINES+1
+ IF(N.EQ.0)WRITE(6,19)WLVAC
+ 19 FORMAT(F12.4)
+ N=N+1
+ IF(LINOUT.LT.0)GO TO 20
+ E=ETIO(LEVELLO,ISO)
+ EP=ETIO(LEVELUP,ISO)
+ XJ=XJTIO(LEVELLO)
+ XJP=XJTIO(LEVELUP)
+ LABEL(1)=STATETIO(LEVELLO,ISO)
+ LABELP(1)=STATETIO(LEVELUP,ISO)
+ LABELP(2)=LABELISO(ISO)
+ GFLOG=(IGFLOG-16384)*.001
+ GF=TABLOG(IGFLOG)
+ GR=(IGR-16384)*.001
+C GS=-16.383
+ GS=-9.99
+ GW=-7.
+ WRITE(14)LINDAT8,LINDAT4
+ N14=N14+1
+ 20 CONTINUE
+ 21 N=N-1
+ print *,n14
+ WRITE(6,22)N
+ 22 FORMAT(I10,13H IS LAST LINE)
+ WRITE(6,19)WLVAC
+ 25 WRITE(6,26)NLINES
+ 26 FORMAT(I10,25H LINES WRITTEN ON TAPE 12)
+ REWIND 93
+ WRITE(93)NLINES,LENGTH,IFVAC,IFNLTE,N19,TURBV,DECKJ,IFPRED,
+ 1WLBEG,WLEND,RESOLU,RATIO,RATIOLG,CUTOFF,LINOUT
+ CALL EXIT
+ END
+ SUBROUTINE TABVACAIR(AIRSHIFT)
+ REAL*4 AIRSHIFT(60000)
+ REAL*8 WLVAC,VACAIR
+ DO 1 IWL=1,1999
+ 1 AIRSHIFT(IWL)=0.
+ DO 2 IWL=2000,60000
+ WLVAC=IWL*.1
+ 2 AIRSHIFT(IWL)=VACAIR(WLVAC)-WLVAC
+ RETURN
+ END
+ FUNCTION VACAIR(W)
+ IMPLICIT REAL*8 (A-H,O-Z)
+C W IS VACUUM WAVELENGTH IN NM
+ WAVEN=1.D7/W
+ VACAIR=W/(1.0000834213D0+
+ 1 2406030.D0/(1.30D10-WAVEN**2)+15997.D0/(3.89D9-WAVEN**2))
+C 1(1.000064328+2949810./(1.46E10-WAVEN**2)+25540./(4.1E9-WAVEN**2))
+ RETURN
+ END