Ray tracing subroutines and functions used at CIRES/NOAA
(as of 15 June 2011)

Programs, subroutines, and functions in raytracing/pcharpo/s0.for
PROGRAM RAYTRC SETS THE INITIAL CONDITIONS FOR EACH RAY AND CALLS TRACE

Subroutines and functions in raytracing/pcharpo/s1.for
SUBROUTINE TRACE CALCULATES ONE RAYPATH FOR THE REQUESTED NUMBER OF HOPS

Subroutines and functions in raytracing/pcharpo/s2.for
FUNCTION REFLECT COMPUTES NORMAL AND PARALLEL COMPONENTS OF THE K-VECTOR AT REFLECTION POINTS TO A SURFACE. WIND EFFECTS ARE INCLUDED.
SUBROUTINE FIT COMPUTES THREE TYPES OF PARABOLIC FITS TO RAY PATH RELATIVE TO TERRAIN.
SUBROUTINE PRINTR PRINTS OUTPUT AND OUTPUTS RAYSETS (MACHINE READABLE OUTPUT).

Subroutines and functions in raytracing/pcharpo/s3.for
SUBROUTINE RAYPLT with ENTRY ENDPLT PLOTS PROJECTIONS OF RAYS ON A VERTICAL OR HORIZONTAL PLANE.
SUBROUTINE CIRCLE Subroutine to draw a circle around the core of a vortex in a projection on the ground
SUBROUTINE PLOTNOTE Subroutine to add notes to the plot in a projection on the ground.
SUBROUTINE RAYPLUS Puts a plus sign on a rayplot.

Subroutines and functions in raytracing/pcharpo/s4.for
SUBROUTINE MX1ALF SPECIFY USE OF ALTERNATE CHARACTER SET NUMBER 1 (DISSPLA)
SUBROUTINE MX2ALF SPECIFY USE OF ALTERNATE CHARACTER SET NUMBER 2 (DISSPLA)

Subroutines and functions in raytracing/g/s5.for
SUBROUTINE DFSYS ROUTINES WHICH RELY ON SYSTEM BASED FUNCTIONS
INTEGER FUNCTION I1mach Return integer machine dependent constants
REAL FUNCTION R1mach Return floating point machine dependent constants
DOUBLE PRECISION FUNCTION D1mach Return floating point machine dependent constants
SUBROUTINE READW1 HANDLES INPUT OF TABULAR DATA REQUIRED BY SOME MODELS
SUBROUTINE GTUNIT EXTRACT UNIT CONVERSION SPECIFIERS FROM TABULAR DATA INPUT
SUBROUTINE SREAD1 ADDS TABULAR DATA TO THE DEFAULT GP ARRAY PGP
FUNCTION READW READS W ARRAY MAKING ANY NECESSARY CONVERSION OF UNITS
SUBROUTINE CLEAR SET N ELEMENTS OF AN ARRAY TO ZERO
FUNCTION ND2B CONVERT A NUMERIC DECIMAL DIGIT STRING TO A BIT STRING WITH EACH BIT SET BY A CORRESPONDING DECIMAL DIGIT
LOGICAL FUNCTION UCON PROVIDES KEYWORD UNITS CONVERSION FOR W-ARRAY INPUT
FUNCTION GET1 FUNCTIONALLY THE SAME AS 'GET' PROGRAM, SEE DOCUMENTATION THERE.
FUNCTION GET PROVIDE A CONTROL METHOD FOR AVOIDING REDUNDANT CALLS TO THE TERRAIN AND RECEIVER MODELS
FUNCTION ITEST USED TO PASS INTEGER VALUES THROUGH FOR VARIABLES TYPED REAL
FUNCTION ITOC RETURN 7 CHARACTER STRING REPRESENTATION OF INTEGER N
SUBROUTINE SETTRC INITIALIZE /TRAC/ LABELED COMMON
LOGICAL FUNCTION WCHANGE PROVIDES A TEST AGAINST TWO W-ARRAYS
FUNCTION RENORM NORMALIZES A VECTOR TO A GIVEN MAGNITUDE
SUBROUTINE SET2 SETS N COMPONENTS OF VECTOR A TO SINGLE VALUE V
SUBROUTINE ISET2 SETS N COMPONENTS OF INTEGER VECTOR NA TO SINGLE VALUE NV
SUBROUTINE PUTDES TITLING AID, OUTPUT MODULE DESCRIPTION AS HOLLERITH NAME AND NUMERIC IDENTIFIER
FUNCTION NUMSTG CONVERTS AN integer v(n) to a string numstg*80
SUBROUTINE SFILL FILLS A STRING WITH N SPECIFIED CHARACTERS
INTEGER FUNCTION STRIM DETERMINES POSITION OF LAST NONBLANK CHARACTER OF A STRING
FUNCTION RERR RETURNS RELATIVE ERROR OF VARIABLE RKVAR(NKV)
SUBROUTINE RERROR REPORTS ERROR CONDITIONS AND STOPS PROGRAM
SUBROUTINE STOPIT PRINTS CONDITION AND STOPS PROGRAM AFTER CALLING THE SYSTEM POST MORTEM DUMP
SUBROUTINE PUTKST WRITE LINE OF OUTPUT TO PRINTER UNIT ADDING TO LINE COUNT
SUBROUTINE PUTKCT PUT OUT A CENTERED LINE AND COUNT
SUBROUTINE OPNREP OPEN OPERATION ALLOWS FOR AN EXISTING VERSION OF A FILE. IF THE FILE EXISTS IT IS OVERWRITTEN. THE LOGIC USED IS HOPEFULLY MACHINE INDEPENDENT
SUBROUTINE ZAPFIL TEST FOR EXISTENCE OF FILE AND DELETE
SUBROUTINE OVERRD OVERRIDE SUPPORT ROUTINE
SUBROUTINE SFILTR FILTERS EXTRANEOUS CHARACTERS FROM PLOT LABELS
FUNCTION ALCOSH COMPUTE LOG(COSH(X)) AND USE LARGE ARGUMENT APPROXIMATION WHEN POSSIBLE
SUBROUTINE GAUSEL MATRIX INVERSION BY METHOD OF GAUSSIAN PIVOT
SUBROUTINE FTANH general purpose hyperbolic tangent subroutine TO MAKE A PROFILE REPRESENTED BY A SEQUENCE OF LINEAR SEGMENTS SMOOTHLY JOINED BY HYPERBOLIC FUNCTIONS
SUBROUTINE FTANH2 general purpose hyperbolic tangent subroutine TO MAKE A PROFILE REPRESENTED BY A SEQUENCE OF LINEAR SEGMENTS SMOOTHLY JOINED BY HYPERBOLIC FUNCTIONS
SUBROUTINE FTANH3 general purpose hyperbolic tangent subroutine TO MAKE A PROFILE REPRESENTED BY A SEQUENCE OF LINEAR SEGMENTS SMOOTHLY JOINED BY HYPERBOLIC FUNCTIONS
SUBROUTINE GAMANG CALCULATE THE SIDE OF A SPHERICAL TRIANGLE BY LAW OF COSINES
SUBROUTINE PLTNOTE add labels for contour plots
SUBROUTINE QUARTIC Solution of a quartic equation
SUBROUTINE CUBIC Solution of a cubic equation

Subroutines and functions in raytracing/g/s6.for
SUBROUTINE PLOT PLOTS ONE VECTOR FROM CURRENT PLOT POSITION TO POINT (X,Y) TAKING BORDER CROSSINGS INTO ACCOUNT
SUBROUTINE LABPLT LABEL THE CURRENT PLOT
SUBROUTINE PLTHLB HORIZONTAL TICK ANNOTATION ROUTINE FOR RAYPLOT
SUBROUTINE PLTANH TICK LABELING FOR HORIZONTAL OR RECTANGULAR PLOT PROJECTION
SUBROUTINE SETXY PLOT INITIALIZATION; SETS PROJECTION PARAMETERS
SUBROUTINE TIKLINE DRAWS STRAIGHT LINE WITH TICKS AT INTERVALS
SUBROUTINE PLTANOT PUTS STANDARD ANNOTATIONS ON PLOTS
SUBROUTINE DRAWTIKS HORIZONTAL PLOT PROJECTION SUPPORT ROUTINE. DRAW BOUNDARY TO PLOT AREA, TICS AND TIC LABELS.
SUBROUTINE PLTLB PUT VERTICAL TIC ANNOTATIONS ON RAY PLOT
SUBROUTINE ARCTIC DRAW RANGE AXIS AND TICKS IN RAY TRACE PLOT. INCLUDES ANY CURVILINEAR PROJECTIONS PROVIDED IN DDGRAPH.
SUBROUTINE DDINIT INITIALIZES PLOTTING PROCESS (DDPLOT)
SUBROUTINE DDBP SETS A VECTOR ORIGIN (DDPLOT)
SUBROUTINE DDVC PLOTS A VECTOR (DDPLOT)
SUBROUTINE DDTEXT WRITES A CHARACTER ARRAY PACKED A10 (DDPLOT)
SUBROUTINE DDTAB INITIALIZES TABULAR PLOTTING (DDPLOT)
SUBROUTINE DDFR ADVANCE ONE PLOTTING FRAME (DDPLOT)
SUBROUTINE DDEND EMPTIES PLOT BUFFER AND RELEASES PLOTTING COMMAND FILE (DDPLOT)
SUBROUTINE DASH ACTIVATE DASHED LINE CONNECTIONS (DISSPLA)
SUBROUTINE RESET RESETS AN OPTION TO ITS DEFAULT VALUE (DISSPLA)
SUBROUTINE HEIGHT SETS REFERENCE CHARACTER HEIGHT IN INCHES (DISSPLA)
SUBROUTINE SCMPLX SPECIFY USE OF SIMPLEX CHARACTER SET (DISSPLA)

Subroutines and functions in raytracing/g/s7.for
FUNCTION C TRUNCATE INPUT STRING TO 81 CHARACTERS
FUNCTION XLOR EXCLUSIVE OR
FUNCTION BINARY VALUE OF FUNCTION IS 1 IF ARGUMENT GREATER OR EQUAL TO ZERO, -1 OTHERWISE
FUNCTION FUD RETURNS VALUE SLIGHTLY HIGH IN ALL CASES FOR CONVERTING TO INTEGERS TO AVOID TRUNCATION PROBLEM
SUBROUTINE SWAP2 SWAPS TWO PAIRS OF NUMBERS
SUBROUTINE COPYVL COPIES A VECTOR ONTO A COLUMN OF A MATRIX.
SUBROUTINE CROSSP COMPUTE CROSS PRODUCT OF VECTORS
FUNCTION CTRIM FINDS LENGTH OF CHARACTER STRING EXCLUDING TRAILING BLANKS.
SUBROUTINE SETUP OBTAIN DATE-TIME, READ USER IDENTIFICATION AND COMPUTE CONSTANTS.
SUBROUTINE IZPZ INITIALIZATION FOR ZPZ
SUBROUTINE ZPZ 'ZPZ' CONVERTS THE SPHERICAL COORDINATES THETAP,PHIP OF A POINT IN PRIMED SPACE TO COORDINATES THETA,PHI IN UNPRIMED SPACE WHERE PRIMED SPACE IS LOCATED RELATIVE TO UNPRIMED SPACE
FUNCTION GCIRCLE GREAT CIRCLE DISTANCE
SUBROUTINE MATRIXM MATRIX MULTPLICATION
SUBROUTINE NORMV COMPUTE NORMLIZED VECTOR COMPONENTS FOR VECTOR V

Subroutines and functions in raytracing/g/s8.for
SUBROUTINE COMPRS INITIALIZE THE METACODE FILE (DISSPLA)
SUBROUTINE CURVE DRAWS A CURVE THROUGH A SET OF DATA POINTS WITH OR WITHOUT MARKER SYMBOLS (DISSPLA)
SUBROUTINE DONEPL TERMINATES PLOTTING SESSION (DISSPLA)
SUBROUTINE ENDPL TERMINATES PLOTTING ON CURRENT PAGE (DISSPLA)
SUBROUTINE MX1ALF SPECIFY USE OF ALTERNATE CHARACTER SET NUMBER 1 (DISSPLA)
SUBROUTINE MX2ALF SPECIFY USE OF ALTERNATE CHARACTER SET NUMBER 2 (DISSPLA)
FUNCTION NCLOSE ADDITIONAL LOGIC TO INSURE THAT DIGITS ARE NOT PACKED TOO CLOSE TOGETHER.
SUBROUTINE NOBRDR SUPPRESSES DRAWING THE PAGE BORDER (DISSPLA)
SUBROUTINE PAGE DEFINE LIMITS OF PHYSICAL PAGE (DISSPLA)
SUBROUTINE PHYSOR DEFINE LOCATION OF PHYSICAL ORIGIN OF PLOTTING AREA (DISSPLA)
SUBROUTINE GRACE DEFINE MARGIN AROUND PLOTTING AREA (DISSPLA)
SUBROUTINE GRAFB ROUTINE WHICH ESTABLISHES BOXED X AND Y AXES (DISSPLA)
SUBROUTINE FULANN ANNOTATION MODEL SUITED FOR PUBLICATION QUALITY LETTERING
SUBROUTINE SCLPIC SCALES CURVE MARKER SYMBOLS (DISSPLA)
SUBROUTINE SUPNEG SET COUNTERS FOR NUMBER OF NEGATIVE AXIS VALUES TO MAKE POSITIVE
SUBROUTINE TITLE DEFINES TITLE, AXES LABELS AND LENGTHS OF PLOTS (DISSPLA)
SUBROUTINE TITLXY TITLES FOR X AND Y AXES
SUBROUTINE VMNMX FINDS MINIMUM AND MAXIMUM OF AN ARRAY
SUBROUTINE XTICKS SPECIFIES NUMBER OF SUBTICKS PER MAJOR TICK MARK (DISSPLA)
SUBROUTINE YTICKS SPECIFIES NUMBER OF SUBTICKS PER MAJOR TICK MARK (DISSPLA)
SUBROUTINE TITLTX THIS IS CALLED BY TITLE IN ORDER TO WRITE TO NDEVTXT.
SUBROUTINE WRITW This routine is no longer used.
SUBROUTINE MARKER SPECIFIES MARKER SYMBOL TO BE USED BY CURVE ROUTINE (DISSPLA)
SUBROUTINE KURVE (KURVE) MODIFIED VRS OF DISSPLA 'CURVE'. DOES CLIPPING AND MARKER SELECTION.
SUBROUTINE PLOTINI (PLOTTING) INITIALIZE PLOTTING FOR EIGEN PROGRAM
SUBROUTINE PLTTLT (PLTTLT) PUT TITLES ON PLOTS FOR EIGEN PROGRAM
FUNCTION F MODIFY ANNOTATIONS FOR EIGEN PROGRAM DEPENDING ON ANNOTATION MODEL.
SUBROUTINE CPLOT CLIPPED PLOT LINE PROGRAM. USES STANDARD CLIPPING ALGORITHM (CLIP) TO DETERMINE BREAKPOINTS AND INSERTS ANY LINE SEGMENTS TO PRODUCE CONNECTED LINE.
SUBROUTINE YTRIM ELIMINATES SEGMENTS OF LINE FROM HIGH END WHOSE Y VALUES EXCEED GIVEN VALUE.
FUNCTION CLIP PERFORM STANDARD CLIPPING ON SINGLE LINE SEGMENTS (X1,Y1;X2,Y2) AGAINST WINDOW (XL,YB;XR,YT).
FUNCTION KODE VALUE IS ZERO IF (X,Y) WITHIN PLOTTING AREA. IF OUTSIDE OF PLOTTING AREA, HAS OTHER VALUES THAT DEPEND ON WHICH OCTANT OUTSIDE OF PLOTTING AREA.
SUBROUTINE DDCON CONTOUR PLOTTING
SUBROUTINE PLOTXY PLOT ONE POINT
SUBROUTINE DDSC PLOT ONE VECTOR FOR CONTOUR PLOTTING
SUBROUTINE DDST CALLED BY DDGRAPH TO COMPUTE CURVILINEAR PROJECTIONS AT SCALED POINT SCX,SCY.
SUBROUTINE PLOTHB TICK LABELING
SUBROUTINE PLOTLB TICK LABELING
Subroutine Flush This routine is called by DDCON after every contour level is processed or in the event that NUMPTS reaches 2000.

Subroutines and functions in raytracing/pcharpo/conblk2.for
SUBROUTINE CONBLK DATA INITIALIZATION AND FILE OPENING SERVICE ROUTINE

Subroutines and functions in raytracing/pcharpo/atmoshd.for
SUBROUTINE ATMOSHD PRINTS PAGE HEADINGS FOR RAY TRACING IN THE ATMOSPHERE

Subroutines and functions in raytracing/pcharpo/ocnhd.for
SUBROUTINE OCNHD PRINTS PAGE HEADINGS FOR RAY TRACING IN THE OCEAN

Programs, subroutines, and functions in raytracing/pcharpo/formateig.for
PROGRAM formateigen Formats TAPE1 and RYSFIL (outputs from HARPA) for use with EIGEN. Specifically, it separates the portions before and after the ****SOFT EOF***+++++ in PUNCH into TAPE1 and RYSFIL, respectively.

Subroutines and functions in raytracing/conplt/conplt.for
PROGRAM CONPLT PLOTS CONTOURS OF TEMPERATURE, SOUND SPEED, WIND/CURRENT VELOCITY, ETC.

Subroutines and functions in raytracing/conplt/contour1.for
SUBROUTINE CONHEAD PUT HEADERS ON CONTOUR PLOTS.
SUBROUTINE DFCNST PROVIDES CONSTANTS WHICH ARE EXPLICITLY DEPENDENT ON MACHINE ARCHITECTURE AND SHOULD BE EXAMINED WHEN MAKING ANY MIGRATION OF THE RAY TRACING ROUTINES.
SUBROUTINE ENDPLT This is a stub routine that exists solely to satisfy the call in READW.

Subroutines and functions in raytracing/conplt/conblk3.for
SUBROUTINE CONBLK DATA INITIALIZATION AND FILE OPENING SERVICE ROUTINE

Subroutines and functions in raytracing/profile/profile.for
PROGRAM PROFILE PLOTS PROFILES OF TEMPERATURE, SOUND SPEED, ETC. FOR ATMOSPHERIC/OCEANIC MODELS

Subroutines and functions in raytracing/profile/pcprof1.for
SUBROUTINE DFCNST PROVIDES CONSTANTS WHICH ARE EXPLICITLY DEPENDENT ON MACHINE ARCHITECTURE AND SHOULD BE EXAMINED WHEN MAKING ANY MIGRATION OF THE RAY TRACING ROUTINES.

Subroutines and functions in raytracing/profile/pcprof2.for
SUBROUTINE PLOTAL PLOT ONE PROFILE
SUBROUTINE PLTINI PLOT INITIALIZATION
SUBROUTINE PSCALE CHOOSES THE SCALE FOR AN AXIS BASED ON THE MINIMUM (AM) AND MAXIMUM (AX) VALUES FURNISHED.

Subroutines and functions in raytracing/profile/pcprof3.for
SUBROUTINE PRFPLT MULTI-FUNCTION GRAPHICAL SUPPORT ROUTINE TO AID IN THE PRODUCTION OF ANNOTATED MULTI-TRACE X-Y PLOTS.
INTEGER FUNCTION PRFSUP CONTAINS ENTRY POINTS TO CALCULATE THE PROFILE VALUES FOR EACH KIND OF PROFILE

Subroutines and functions in raytracing/profile/pcprof4.for
SUBROUTINE ENDPLT This is a stub routine that exists solely to satisfy the call in READW.

Subroutines and functions in raytracing/profile/conblk1.for
SUBROUTINE CONBLK DATA INITIALIZATION AND FILE OPENING SERVICE ROUTINE

Subroutines and functions in raytracing/eigen/eigen.for
PROGRAM EIGEN PROGRAM TO PLOT RANGE VERSUS ELEVATION ANGLE OF TRANSMISSION AND RANGE VERSUS TRAVEL TIME AND TO CALCULATE EIGENRAYS
SUBROUTINE RETRANSMIT Allows the eigenray program to use the ends of rays as virtual transmitters to calculate Fresnel zones. The eigenray program produces a file named doutp2, that can be used as input to the ray tracing program.

Subroutines and functions in raytracing/eigen/eigen2.for
SUBROUTINE VINTERP Interpolation routine
FUNCTION GETRAYS READ NRUN'TH RAYSET FROM FILE UNIT NDEV.
FUNCTION GETRAY1 READ SINGLE RAYSET FROM FILE UNIT NDEV.

Subroutines and functions in raytracing/eigen/eigen3.for
SUBROUTINE DFCNST PROVIDES CONSTANTS WHICH ARE EXPLICITLY DEPENDENT ON MACHINE ARCHITECTURE AND SHOULD BE EXAMINED WHEN MAKING ANY MIGRATION OF THE RAY TRACING ROUTINES.

Subroutines and functions in raytracing/eigen/eigen4.for
SUBROUTINE ENDPLT This is a stub routine that exists solely to satisfy the call in READW.
SUBROUTINE SURFACE This is a stub routine that exists solely to satisfy the call in READW.
SUBROUTINE RECEVER This is a stub routine that exists solely to satisfy the call in READW.
SUBROUTINE TOPOG This is a stub routine that exists solely to satisfy the call in READW.

Subroutines and functions in raytracing/eigen/conblk4.for
SUBROUTINE CONBLK DATA INITIALIZATION AND FILE OPENING SERVICE ROUTINE

Subroutines and functions in raytracing/eigen/cea.for
SUBROUTINE BETTERCEA SPHERICAL TRIANGLE WITH SIDES A,B,C ARE OPPOSITE ANGLE ALPHA, BETA,GAMMA.

Subroutines and functions in raytracing/psgraph/psgraph1.for
PROGRAM PSGRAPH This program creates a PostScript output file and graphics screen output from a TXTOUT input file. TXTOUT is the output from one of the raytracing programs, PROFILE,CONPLT,EIGEN,PC-HARPO.
Subroutine USER_PROMPT Prompts the user with a series of questions.
Subroutine ADV_FEATURES ADVANCED FEATURES
Subroutine GET_DEFAULTS Defaults for input file name, scale zize, font size, line width, editing factor, slow motion factor, and output file name
Subroutine INIT_PS_FILE Initialize the postscript file.
Subroutine FRAME Draw the box that is to contain the plot. We will later "clip" to this box.
Subroutine DRAW_TICKS_PS Draw tick marks and label them.
Subroutine SIGNIF_DIGITS determines how many characters are necessary to construct the smallest FORTRAN format edit descriptor (e.g. F4.1) which will write all the significant digits of a given input number, RNUM.
Subroutine LABEL_AXES_PS labels the x and y axes and places the title at the top of the graph.
Subroutine TRIM_STRING Trim the trailing blanks from the OLDSTRING and put them in the NEWSTRING.
INTEGER FUNCTION LEN_TRIMMED determines the length of OLDSTRING without any trailing blanks.
Subroutine CNVRT_LOWER Handle case of not having any lower case letters in the string.
Subroutine PLOT_PTS_PS plots curves (actually points connected by a series of "lineto"s) and discrete data points (MARKER .lt 0) to the PostScript file.
Subroutine RAYPLOT_PTS_PS handles plotting the line graphs for rayplots only.
Subroutine RAYTXT_OUT_PS Handles text output for rayplots and contour plots.
Subroutine SUBHEAD_PS Handles subheading for regular profiles as well as subheading for point plots (i.e. marker not equal to 0).

Subroutines and functions in raytracing/psgraph/psgraph3.for
Subroutine GET_VIDEO_MODE do-nothing version to suppress screen plotting
Subroutine PLOT_PTS_VT do-nothing version to suppress screen plotting
Subroutine SETVIDEO_DFT do-nothing version to suppress screen plotting
Subroutine CLR_SCREEN do-nothing version to suppress screen plotting
Subroutine LABEL_AXES_VT do-nothing version to suppress screen plotting
Subroutine SUBHEAD_VT do-nothing version to suppress screen plotting
Subroutine PAUSEIT do-nothing version to suppress screen plotting
Subroutine RAYTXT_OUT_VT do-nothing version to suppress screen plotting

Subroutines and functions in raytracing/fndmodlh/fndmodlh.for
Program FINDMODL This program reads the DINP file to determine the models that will be used by the PC-HARPO program.
SUBROUTINE CHECK_MODEL_TABLE Finds each requested model in the model table (MODLTABL.DAT).
INTEGER FUNCTION LEN_TRIMMED This function determines the length of OLDSTRING without any trailing blanks.