SUBROUTINE AIR ( FSET, DISP, SPACING, fitdisp, dispf ) C C Calculate the appropriate dispersions for the two color method. C IMPLICIT UNDEFINED (A-Z) save INTEGER *4 I, J, K, FSET REAL *8 WAVE(2), WREF(2), T, P, E, INDEX(2), S1(2), S2(2) REAL *8 LAMBDA(4), FR1, FR2 REAL *4 SPACING(9,2), DISP(4), dispf(4) logical fitdisp,forcedisp,first data first,forcedisp / .true., .false. / DATA WAVE / .550, .500 / DATA WREF / .700, .800 / DATA T, P, E / 273., 1013., 0. / write(6,'(a,5f8.3)') ' Wavelengths are: ', wave, wref(fset) if(first)then first=.false. fitdisp=.false. write(6,*)'Enter dispersion values!' write(6,*)'(0 0 0 0 for default; -1 -1 -1 -1 to fit)' c read(5,*)dispf(1),dispf(2),dispf(3),dispf(4) if(dispf(1).eq.-1)then fitdisp=.true. write(6,*)'OK, let us fit the dispersion constants.' else if(dispf(1).ne.0)then forcedisp=.true. write(6,*)'OK, let us use the new dispersion constants.' endif endif CALL AINDEX ( P, T, E, WREF(FSET), INDEX(2) ) DO I = 1, 2 CALL AINDEX ( P, T, E, WAVE(I), INDEX(1) ) DISP(I) = INDEX(1) / ( INDEX(1) - INDEX(2) ) if(forcedisp)disp(i)=dispf(i) SPACING(1,I) = 0 DO J = 1, 2 FR1 = FLOAT(J) * WREF(FSET) DO WHILE ( FR1 .GT. 0. ) FR1 = FR1 - WAVE(I) END DO SPACING(4*J-2,I) = FR1 SPACING(4*J-1,I) = FR1 + WAVE(I) SPACING(4*J ,I) = -FR1 SPACING(4*J+1,I) = -FR1 - WAVE(I) END DO DO J = 1, 9 SPACING(J,I) = SPACING(J,I) * DISP(I) END DO END DO if(fset.eq.2)then call aindex ( p, t, e, wref(1), index(1) ) disp(4) = index(1) / ( index(1) - index(2) ) if(forcedisp)disp(4)=dispf(4) endif CALL AINDEX ( P, T, E, WAVE(1), INDEX(2) ) CALL AINDEX ( P, T, E, WAVE(2), INDEX(1) ) DISP(3) = INDEX(1) / ( INDEX(1) - INDEX(2) ) if(forcedisp)disp(3)=dispf(3) RETURN END