SUBROUTINE ZWCOMP(SAMP,DC,M,WAVE,STATUS) C C Module Number: 13.3.2.1 C C Module Name: zwcomp C C Keyphrase: C ---------- C Compute HRS wavelengths C C Description: C ------------ C The Wavelength at the specified photocathode sample position C and spectral order is computed using dispersion coefficients C giving sample position as a function of order and wavelength. C The dispersion equation is solved using Newtons iterative method C with the input wavelength as an initial guess. C C FORTRAN Name: zwcomp.for C C C Keywords of Accessed Files : C -------------------------- C none C C Modules Called: C --------------- C SDAS: C umsput C History: C -------- C Version Date Author Description C 1 Oct 86 D. Lindler Designed and coded C 2 dec 87 D. Lindler New sdas i/o and standards C------------------------------------------------------------------------ C INCLUDE FILE FOR THE IRAF77 FORTRAN INTERFACE TO THE IRAF VOS C C C FILE I/O ACCESS MODES C INTEGER RDONLY PARAMETER (RDONLY = 1) INTEGER RDWRIT PARAMETER (RDWRIT = 2) INTEGER WRONLY PARAMETER (WRONLY = 3) INTEGER APPEND PARAMETER (APPEND = 4) C C CODES FOR DATA TYPES C INTEGER TYBOOL PARAMETER (TYBOOL = 1) INTEGER TYCHAR PARAMETER (TYCHAR = 2) INTEGER TYINT PARAMETER (TYINT = 4) INTEGER TYREAL PARAMETER (TYREAL = 6) INTEGER TYDOUB PARAMETER (TYDOUB = 7) C C UMSPUT DESTINATIONS -- CB, DAO, 4-SEP-87 C INTEGER STDOUT PARAMETER (STDOUT = 1) INTEGER STDERR PARAMETER (STDERR = 2) C C UHDAS HEADER PARM TYPES -- CB, DAO, 5-SEP-87 C INTEGER GENHDR PARAMETER (GENHDR = 0) INTEGER IMSPEC PARAMETER (IMSPEC = 1) C C THIS SECTION IS FOR PARAMETERS RELEVANT TO TABLE I/O. C C THESE MAY BE SET BY UTPPTI AND/OR READ BY UTPGTI: C C LENGTH OF ROW (UNIT = SIZE OF REAL) INTEGER TBRLEN PARAMETER (TBRLEN = 1) C INCREASE ROW LENGTH INTEGER TBIRLN PARAMETER (TBIRLN = 2) C NUMBER OF ROWS TO ALLOCATE INTEGER TBALLR PARAMETER (TBALLR = 3) C INCREASE ALLOC NUM OF ROWS INTEGER TBIALR PARAMETER (TBIALR = 4) C WHICH TYPE OF TABLE? (ROW OR COLUMN) INTEGER TBWTYP PARAMETER (TBWTYP = 5) C MAXIMUM NUMBER OF USER PARAMETERS INTEGER TBMXPR PARAMETER (TBMXPR = 6) C MAXIMUM NUMBER OF COLUMNS INTEGER TBMXCL PARAMETER (TBMXCL = 7) C TYPE = ROW-ORDERED TABLE INTEGER TBTYPR PARAMETER (TBTYPR = 11) C TYPE = COLUMN-ORDERED TABLE INTEGER TBTYPC PARAMETER (TBTYPC = 12) C C THESE MAY BE READ BY UTPGTI BUT MAY NOT BE SET: C C NUMBER OF ROWS WRITTEN TO INTEGER TBNROW PARAMETER (TBNROW = 21) C C END IRAF77.INC C C INPUT PARAMETERS C DOUBLE PRECISION SAMP C --->PHOTOCATHODE SAMPLE NUMBER DOUBLE PRECISION DC(7) C --->DISPERSION COEFFICIENTS DOUBLE PRECISION M C --->SPECTRAL ORDER NUMBER C C INPUT/OUTPUT PARAMTER C DOUBLE PRECISION WAVE C --->WAVELENGTH C C OUTPUT PARAMETER C INTEGER STATUS C --->ERROR STATUS C C LOCAL VARIABLES C DOUBLE PRECISION AA,BB,CC C --->POLYNOMIAL COEF. INTEGER ITER C --->ITERATION COUNTER CHARACTER*130 CONTXT C --->WHAT HAPPENED DOUBLE PRECISION SCOMP C --->COMPUTE SAMPLE POSITION DOUBLE PRECISION SLOPE C --->SLOPE OF POLYNOMIAL REAL EPS C --->CONVERGENCE TEST 0.01 DIODES INTEGER ISTAT C C DATA DECLARATIONS C DATA EPS/0.01/ C------------------------------------------------------------------------ C C C COMPUTE POLYNOMIAL COEFFICIENTS C AA=DC(1)+DC(4)*M BB=DC(2)*M + DC(5) + DC(6)*M*M CC=DC(3)*M*M + DC(7)*M C C PERFORM NEWTON ITERATION C ITER=0 C --->ITERATION COUNT SCOMP=AA+BB*WAVE+CC*WAVE*WAVE C --->INITIAL GUESS 50 IF (ABS(SAMP-SCOMP).LE.EPS)GO TO 60 ITER=ITER+1 SLOPE=BB+2*CC*WAVE C --->SLOPE OF LINE IF( (ABS(SLOPE).LT.1.0E-10) .OR. (ITER.GT.20) .OR. & (ABS(SLOPE).GT.1.0E10))THEN CONTXT='WAVELENGTH COMP. FAILED TO CONVERGE' STATUS=1 GO TO 999 ENDIF C C COMPUTE NEW WAVELENGTH C WAVE=WAVE+(SAMP-SCOMP)/SLOPE SCOMP=AA+BB*WAVE+CC*WAVE*WAVE GO TO 50 60 STATUS=0 GO TO 1000 999 CALL UMSPUT(CONTXT,STDOUT+STDERR,0,ISTAT) 1000 RETURN END