HEAT_SHIELD DESCRIPTION:
HEAT_SHIELD performs shape optimization for space vehicle forebodies
using Newtonian-type aerodynamics, which are appropriate for hypersonic
flight only.
The constrained optimization package NPOPT is employed (available from
Stanford University).
Provision is made for an optional annulus (cruise engine mount ring)
which must remain fixed in shape - the inner & outer shield are optimized
around the ring, which severely limits the range of motion and may be
impractical to treat well here in practice. (Think of the curvature
discontinuities that could develop across the ring.)
If no ring is present (input TWO_PARTS = F), the defining sections
(spokes) are treated as "outer" sections, with no "inner" sections.
Either half the shield or the whole shield may be optimized, although
it is unlikely that the full shield case is ever the right choice: only
the "half" case ensures bilateral symmetry.
This version includes an option to retain axisymmetry throughout. It
is invoked for the single-part case with a single defining section in
the input (and optimized) geometry file.
COORDINATE SYSTEM:
Right-handed, with X down-stream, Y up, and Z > 0 for port side.
CONTROL FILE:
Any file name, such as heat_shield.inp, specified on the command line.
PRIMARY CONTROL INPUTS:
NDV Number of design variables
NCLIN Number of linear constraints (NPOPT only)
NCNLN Number of nonlinear constraints (NPOPT only)
NITMAX Number of optimization iterations >= 0
GRAD_MODE Gradient mode (in application, not in optimization pkg.):
2 = 2-point forward differences with given h;
3 = 3-point central differences with h * EPSOBJ**(-1/6)
OPTIMIZER INPUTS:
ETA Controls the line search's acceptance of a
sufficiently lower objective. 0 < ETA < 1.0;
try 0.2 for expensive objectives
EPSOBJ Minimum absolute value of a significant
difference in OBJ
N_RAD_MAX # regularized pts., radial (N_INNER + N_OUTER - 1)
N_AZM_MAX # regularized pts. in azimuthal direction
N_INNER # regularized pts., inner
N_OUTER # regularized pts., outer
CUSP Fraction (applied to L_ref) used to determine the
points fudged at the apex to smooth out any cusps
TWO_PARTS T means ring is present, else N_RAD_MAX = N_OUTER
SMOOTH_X T means fit quartics to X vs. azimuth to smooth
likely irregularities near phi = zero; this is
on the perturbed geometry points, not the surface
grid, so that smoothed geometry is saved; it means
the spokes should all be defined with consistent
point distributions.
RI_SPL, RI_SPQ, RI_SPS, RI_SPC Inner and outer controls for
RO_SPL, RO_SPQ, RO_SPS, RO_SPC FOILGRD on radial sections
Long-time usage: 0.5 0 0 0.5
December 2010 recommendations:
(1) R*_SPL < 0 means reverse the distribution, as
found helpful with [-]0.04, 0, 0.3, 0.66 inputs;
(2) R*_SPL = 1 means use curvature-based spacing;
R*_SPQ = 0.5 (curvature-effect power) is recommended;
R*_SPS = 1 = R*_SPC is recommended for sphere-cones
(smoothing of the curvature-based shape function and
index-based smoothing of the resulting distribution)
else enter 0 to suppress either type of smoothing.
OBJECTIVE FUNCTION INPUTS:
The "RHO"s are multipliers for the terms included in the objective
being minimized. Most have nonlinear constraint analogues. Normally,
constraints are preferable and picking one form or the other is
advisable (not both), but this is a gray area. For instance, RHO_AL
appears to assist satisfaction of the ALPHA constraint. (Treating
Alpha as a variable is better yet.)
Normally, RHO_* > 0. means optimization should improve the situation.
For instance, L/D is normally increased if RHO_LD > 0., although some
constraint(s) may actually require it to decrease. In other cases,
a negative RHO may actually be appropriate (as in the case of trying
to INCREASE CD instead of decrease it).
RHO_CM_TARG Pitching moment multiplier
RHO_CM_MAX (1. - |Pitching moment|) ...
RHO_CD Drag ...
RHO_LD -L/D (better behaved than D/L)
RHO_TEMP_MAX Max. temperature ...
RHO_CD_INV Inverse drag ...
RHO_CD_TARG Target drag ...
RHO_AL Square of MAX (AL_TARG - Alpha, 0.)
RHO_CURVI Sum of MAX (radial CURV(i,j) - CR_TARG, 0.) ** 2
RHO_CURVJ Sum of MAX (azimuthal CURV(i,j) - zero, 0.) ** 2 ! DON'T USE
RHO_CVIMX Max. curvature in radial direction over all spokes
RHO_CVJMX Max. curvature in azimuthal direction (probably worthless)
RHO_SMTH_X Sum of residuals**2 when quartics are fit to X vs. azimuth
RHO_SWET > 0 means penalize SWET > SBASE;
< 0 means penalize SWET < SBASE; for a violation,
RHO_SWET is multiplied by (SWET - SBASE)/SREF
RHO_VNORM Squared 2-norm of the sine bump variables; small multipliers
should tend to regularize the solution by preferring the
shortest-length set of sine bump multipliers; try 1.E-6
RHO_AREA -cross-sectional area (rho > 0 maximizes the area)
RHO_VOLUME -volume: rho > 0 maximizes volume
RHO_V_EFF -eff. vol. coef. [6 sqrt (pi) volume / Sarea^1.5]; rho > 0
RHO_CD_A -(CD x cross-sectional area): rho > 0 maximizes CD x A
RHO_CM_ALF dCM/dAlpha
RHO_TVD_GC Total variation diminishing function of the Gaussian
curvature distribution G(i,k) along the surface grid spokes;
use some small multiplier (0.001, say) to help smooth the
curvature (and hence the geometry) in the i index direction;
obj. term = sum over k and i of (G(i+1,k) - G(i,k))**2
Note that the variation in the k (azimuthal) direction is
not included, because the grid lines tend not to follow the
shoulder for asymmetric cases.
AERODYNAMIC INPUTS:
CM_TARG Target pitching moment (needs ALPHA_MODE > 0)
CM_TOL Tolerance for matching target pitching moment
CD_TARG Target CD
AL_TARG Target Alpha: angles less than AL_TARG are penalized
CR_TARG Maximum radial curvature at any point;
curvature >= 0. for a normal convex shape, but CR_TARG > 0.
avoids flatness; used by obj. fn. and nonl. constraint forms
TM_TARG Target maximum temperature
ALPHA_MODE 0 = Fixed Alpha;
1 = Fixed pitching moment (CM_TARG);
2 = Alpha is an optimization variable ('ALPHA ' type)
in which case the starting guess and bounds are
read along with the other variables and the following
input Alpha is ignored
Alpha [Initial] angle of attack, degrees (unless ALPHA_MODE = 2)
Beta Yaw angle, deg
M_inf Free stream Mach number
Gamma Estimate of ratio of specific heats (e.g. 1.2)
DESIGN VARIABLE INPUTS:
The bulk of the design variables are Hicks-Henne-type "sine bumps."
More precisely, they are multipliers of such perturbing shape functions.
These are preceded by any "planform"-type variables (XCEN, YCEN, etc.),
while the optional ALPHA variable follows the sine bumps. These sine
bumps (which have to be decayed in both surface directions) influence
the multi-column form of all of the variable inputs. If variables are
entered out of order, the program will detect this and stop with a
diagnostic. Descriptions for the variables and related inputs follow.
# Ordinal number of design variable - not actually used,
so it doesn't really matter if they get out of order
RBTYP 6-character design variable type for functions that
operate on the planform or in the radial direction.
Available variable names:
XCEN The X axis is taken to be the longitudinal axis of
the vehicle. XCEN changes the location of the
apex, or forward-most point of the heat shield.
It is additive: XCEN = 0. means no perturbation.
YCEN Controls the "vertical" position of the apex.
ZCEN Controls the "sideways" position of the apex (assumed
fixed for now).
X_CG Applied as perturbations to the CG coordinates read from
Y_CG the input geometry file
XRNG Controls the X position of the cruise engine mount ring
ROUT Controls the radial distance to the outer edge of the
shield; note that this may be unsymmetric in azimuth.
XOUT Controls the X position of the outer edge of the shield;
note that this may be unsymmetric in azimuth.
TOUT Controls the position of the outer edge of the shield
along the line joining it to the apex, as long as the
input value of "RBTYPE" equals XOUT/ROUT = tangent of
(90 - cone half angle) (but can this change during the
optimization?).
(The idea is to be able to grow a trim tab.)
Most of the following Hicks-Henne-type perturbing
functions are suited to airfoils, not heat shields.
SIN Standard (modified) sine perturbing function
SINC Cyclic sine function suited to lofting heat shield
perturbations in the azimuthal direction
SINF Flipped sine function
SIN1 Symmetric sine function
SIN2 Symmetric flipped sine function
SIN3 Ensures airfoil LE/TE symmetry; use
[XA, XB] = [0, 1] & XC in (0, .5)
SIN4 Ensures airfoil LE/TE symmetry; use
[XA, XB] = [0, .5] & XC in (0, 1)
COSL Half [co]sine, peak at left (LE)
COSR Half [co]sine, peak at right (TE)
LCOS Inverted form of COSL
RCOS Inverted form of COSR
EXP Standard Exponential function
LED Leading edge droop function (also LEAD)
TRL Trailing edge droop function (also TRAIL)
WAG Wagner shape function
ALPHA If ALPHA_MODE = 2, this variable must follow the sine bumps.
It allows the optimization to proceed such that the specified
pitching moment is achieved at convergence but not necessarily
before that. This is more effective than the alternative of
iterating on angle of attack for every geometry perturbation.
Enter a value and scale factor such that their product is the
desired starting guess for the angle of attack in degrees.
Likewise for the differencing interval (~one-millionth of a
degree) and the lower & upper bounds. E.g., for -20 degrees:
V = -2.00 VSCALE = 10.0 H = 1.E-5 BL = -2.2 BU = 0.0
ZBTYP 4-character design variable type for functions that operate
azimuthally; see SIN2, SINC, etc.
REXP Exponent used by chordwise perturbing shape function
RBMP Center location (as a fraction in [0, 1]) for shape function
RMIN Normally 0.; may be > 0. to avoid affecting forward part of spoke
RMAX Normally 1.; may be < 1. to avoid affecting aft part of spoke
ZEXP Exponent used by azimuthal (lofting) shape function
ZBMP Center location of lofting shape function
ZMIN As for RMIN, RMAX but in aximuthal lofting direction
ZMAX
V Design variable value as seen by the optimizer
VSCALE Scale factor for the design variable to keep it ~O(1);
V * VSCALE is typically the shape function multiplier
AITCH Step size used for estimating the gradient of the objective
w.r.t. the variable by forward differencing (GRAD_MODE = 2);
the actual perturbation used is AITCH * VSCALE;
AITCH is also used for forward derivatives of the nonlinear
constraints; see ALPHA_MODE = 3 above for central differencing
BL Lower bound on the design variable as seen by the optimizer;
BL = -999. means the variable has no lower bound, else
BL scaling should match that of the variable - e.g., for a
variable with VSCALE = 0.1, BL = -10. means the effective
values are >= -10.*0.1 = -1., consistent with AITCH usage
BU Upper bound on the design variable as seen by the optimizer;
BU = 999. means the variable has no upper bound, else BU
scaling should match that of the variable
LINEAR CONSTRAINTS:
If NCLIN = 0, just include two header lines.
# Ordinal number of linear constraint - not used
LCTYPE 6-character linear constraint type:
EDGE_K <Explain>
EDGE_Z <Explain>
BL Lower bound for linear constraint; -999. = -BIGBND
BU Upper bound for linear constraint; 999. = BIGBND
NONLINEAR CONSTRAINTS:
If NCNLN = 0, just include two header lines.
# Ordinal number of nonlinear constraint - not used
NLCTYPE 6-character nonlinear constraint type:
H_FLUX Inactive
W_TEMP Inactive
CM |Pitching moment|
CD Drag coef.
LD L/D
CD_A CD x cross-sectional area of forebody
CM_ALF Derivative of CM w.r.t. Alpha
CG_OFF CG offset (TBD)
ALPHA Angle of attack (don't use if ALPHA_MODE = 2)
AREA Cross-sectional area at forebody base
VOLUME Forebody volume
V_EFF Effective volume coef. = 6 sqrt (pi) volume / Sarea^1.5
WAREA (Wetted area - SBASE) / REF_AREA; use BU = 0.
CURVI Sum of squares of MAX (curvature - CR_TARG, 0.)
in radial direction at all geometry points in (r,x) space
CURVJ Sum of squares of MAX (curvature - CRVJ_TARG, 0.)
in azimuthal direction at all geometry pts. in (y,z) space;
enter CRVJ_TARG >= 0. via XNLCON()
CURVG Sum of squares of MAX (Gaussian curvature - CRVG_TARG, 0.)
over the computational surface grid;
enter CRVG_TARG >= 0. via XNLCON()
CRVIMX Maximum (peak) curvature in the I direction, not counting
the fraction beyond NI * (XNLCON() in [0., 1.])
CRVGMX Maximum Gaussian curvature on the computational grid
SMTH_X Constraint form of the SMOOTH_X option: penalize the
sum of squared deviations from best-fit quartics for
X vs. azimuth at each I of the defining sections;
use BL 0., BU = +eps (TBD).
BL Lower bound on nonlinear constraint value;
-999. = -BIGBND
BU Upper bound on nonlinear constraint value;
+999. = BIGBND
N.B.: these bounds should be in the same units
as the quantities being bounded;
SNLCON will be applied by this program to the
given BL and BU; this is in contrast to the
bounds on the variables themselves, which
(as for their finite differencing intervals) refer
to the scaled variables
XNLCON Real quantity needed (or not) by the nonlinear
constraint
INLCON First index needed (or not) by the nonlinear
constraint
JNLCON Second index needed (or not) by the nonlinear
constraint
SNLCON Scale factor used to provide the optimizer with
nonlinear constraint gradients of order 1
OPTIONAL INPUTS FOR NPOPT:
NPOPT's optional inputs. It should appear after the nonlinear
constraint inputs. Anything beyond that is ignored.
See the NPSOL User Guide for the control parameters in the
following namelist. (Some of them apply to SNOPT only.)
NAMELIST /NPOPTIONS/ &
LEVELVER, MAJORPL, MINORPL, MINORIL, NPRFREQ, &
PENPARAM, STEPLIM, TOLLIN, TOLNLIN, TOLOPT
STEPLIM Limits stepsize of line search; default = 2.
INPUT/OUTPUT FILES:
See CONST_MOD module above and OPENs in main program and in SUMMARY.
GEOMETRY INPUT FORMAT (heat_shield.geo):
Title, e.g. Geometry for Mars 2005 lander
S_ref L_ref X_cg(1) X_cg(2) X_cg(3) S_base
11.044662 3.75 0.81 0.09 0.00 12.2552
FULL NI_SEC NO_SEC NON-DIM
0 11 11 1
XICNTR YICNTR ZICNTR XIRING RIRING
0.0 0.0 0.0 0.24419 0.83179
OUTER RADIAL LINES
Section 1 Outer
NO_INIT ZO_INIT CO_INIT VO_INIT
49 0.0 1.87498 0.69098
RO_INIT XO_INIT
0.00000 0.00000
0.03980 0.00087
: :
1.87433 0.67667
1.87498 0.69098
Section 2 Outer
NO_INIT ZO_INIT CO_INIT VO_INIT
49 0.1 1.87498 0.69098
RO_INIT XO_INIT
0.00000 0.00000
0.03980 0.00087
: :
1.87433 0.67667
1.87498 0.69098
Section 2 Outer
NO_INIT ZO_INIT CO_INIT VO_INIT
49 0.1 1.87498 0.69098
RO_INIT XO_INIT
0.00000 0.00000
0.03980 0.00087
: :
ANALYTIC OPTIONS FOR COMMON GEOMETRIES (heat_shield.analytic):
Two choices are provided via the same file, and the number of lines
in the file is used to distinguish them (10 and 12 lines respectively):
SPHERE-CONE (including Apollo-type spherical section) OPTION:
Analytic specification of a symmetric heat_shield geometry:
0. ! x_nose
0. ! r_nose
5. ! radius_nose
10. ! radius_base
0.25647 ! radius_shoulder
65. ! half_cone_angle; 0 => spherical section (Apollo-like)
0. ! skirt_angle
0. ! skirt_length (from aft-shoulder tangency pt. x to cut-off x)
BICONIC OPTION:
Title
0. ! x_nose
0. ! r_nose
5. ! radius_nose
6. ! radius_cone_juncture
10. ! radius_base
0.25647 ! radius_shoulder
70. ! half_cone_angle_fore
55. ! half_cone_angle_aft
35. ! skirt_angle
0.01 ! skirt_length (from aft-shoulder tangency pt. x to cut-off x)
GEOMETRY NOTES:
A shield consists of either one or two parts. A single part
is considered all "outer". Two parts are separated by a
circular engine mount ring which must not change shape.
Defining sections are entered in cylindrical coordinates
(x, r, theta) where x points into the shield along its axis
of symmetry (if it is conical), r is the radial distance from
the x axis, and theta ("z" in the code) is entered as the
fraction (0. - 1.) of 180 or 360 degrees starting from the
12 o'clock position, depending on the FULL input.
The option to smooth X vs. azimuth at the geometry level
requires that all input sections have the same number of
points, distributed in consistent fashion.
S_ref Reference area for the whole shield.
If FULL = 0, half of S_ref is used internally.
S_base Wetted area, used for "WAREA" constraint, q.v.
FULL 1 means the whole shield is being optimized;
0 means the "right" half looking downstream.
FULL = 1 is inadvisable during optimization.
NON_DIM Controls normalization/shearing of input sections
upon reading them (RD_GEOM): 1 means normalize.
If the shield is in two parts, the inner sections
are normalized by the ring radius, while for outer
sections, the difference between r and ring radius
is normalized by the shield radius. (??)
XICNTR, Coordinates of shield vertex (which may move).
YICNTR,
ZICNTR
XIRING, (x,r) coordinates of points on the ring
RIRING (not used for the 1-part case).
If heat_shield.analytic is present, a symmetric sphere-cone,
spherical-section or biconic forebody is generated, and S_ref and
S_base are derived from the alternative geometry inputs. This is
intended to simplify surface gridding of standard geometries for
CFD purposes (with NITMAX = 0).
Note that an analytic generatrix is discretized almost uniformly
along the arc, with the key tangency points captured precisely,
then it is treated as though it had been read from heat_shield.geo.
The FOREBODY_REGRID program should still be applied to the resulting
heat_shield.xyz output from HEAT_SHIELD to remove the singular point,
then a Gridgen glf file can build an initial hyperbolic volume grid.
HISTORY:
Aug. 2000 J.Reuther Initial NEW_AERO_OPT implementation,
starting with Traj_opt/SYN87-SB, and
applied to the Mars-05 shield.
Nov. 2000 D.Saunders Plugged in argument-driven routines
from program NEWTONIAN (let's keep
them in common), and polished the
source somewhat; 3-pt. curvatures.
Renamed it HEAT_SHIELD.
Dec. 2000 " Aerodynamics now use FACE_AREA(*),
not PROJECTED_AREA(1:3,*). Geometry
and Cp distribution are now saved.
May 2001 J.Reuther Added wetted area constraint.
Nov. 2001 D.Saunders Sections are denormalized/unsheared
before regularization; NOCUSP option;
minimize -L/D, not D/L; move the
moment center with the apex; gridding
in the azimuthal direction needs to be
nonlinear if the apex can move away
from the center...
01/28/02 " ... or for any significant variations
in the defining sections (3-D effects).
Applying interior corrections to the
linear result based on splines at the
rim typically misses an X correction.
Therefore, spline every grid I.
01/29/02 " Added CURVJ constraint: r and x vs.
azimuthal angle, however, doesn't do
it. Use y vs. x approximation.
01/31/02 " Save the perturbed geometry in PLOT3D
form, assuming the spokes have common
point counts. SUMMARY writes file
'heat_shield.spokes' to unit LXYZ.
Added simple-minded CREASE constraint.
02/04/02 " Option to smooth X vs. azimuth: do it
on the geometry data, not the grid, so
that the saved geometry is smoothed.
02/07/02 " SMOOTH_X option is promising, but it can
go unstable. Retain it (possibly just
for use with NITMAX = 0), but adapt it to
penalize X deviations from quartics via
RHO_SMTH_X > 0 or new SMTH_X constraint.
02/11/02 " 1: Apex-smoothing quartics are now tangent at
a precise R from the apex, not at the index
nearest and inboard of R = CUSP * Lref. This
should eliminate occasional bad gradients.
2: ALPHA_MODE = 2 allows Alpha to be one of the
optimization variables. This should reduce
the nonlinearity: we just need CM = 0 at the
solution, not at every evaluation along the way.
02/13/02 " RHO_VNORM option encourages the shortest-length
solution for the non-unique sine bump variables.
Switched from local splines to conventional
splines in NOCUSP, which was presumably the
cause of occasional bad gradients w.r.t. YCEN.
Removed simple-minded CREASE constraint.
03/27/02 " Two-part case needed changes in RD_GEOM and
PERTURB.
11/08/02 " Save (x,y,z,Cp) file for structural analysis.
11/15/02 " NOCUSP failed if r wasn't monotonic (as at the
rim). Therefore, spline inner halves only.
05/21/07 " Cleaned out unconstrained option (QNMDIF2) in
preparation for revival with conic section
geometry options.
08/06/07 " Converted to *.f90 format (80-column free form).
08/07/07 " Added central differencing option (GRAD_MODE).
08/08/07 " Added volume and cross-sectional area calcs.
and constraints on these and on CD x A and on
dCM/dAlpha; these quantities may also contribute
to the objective.
08/09/07 " Added effective volume coef. constraint and
contribution to the objective. Note that the
sectional area is included in the surface area.
08/10/07 " Added X_CG and Y_CG optimization variables,
which behave as for XCEN and YCEN (added to the
initial values found in the input geometry).
08/24/07 " Since the surface grid is left-handed in the
Jameson coordinate system, save it in right-
handed form at the end of a run (but leave it
left-handed during intermediate saves for
I/O efficiency reasons). Right-handedness is
desirable for HYPER_AERO compatibility.
RHO_CVIMX and -CVJMX options added to objective
function. Ignore shoulder region for _CVIMX.
Confine _CVIMAX to lee side also.
11/25/07 " Added an axisymmetric option (single defining
section, single-part case).
11/27/07 " Added CRVIMX constraint, analogous to RHO_CVIMX
option for the objective function.
12/06/07 " Save the keel-crown line for possible use with
HB_GRID and DPLR2D.
Use XNLCON() to provide greater control over
RHO_CVIMX and the CRVIMX (peak crv.) constraint.
12/07/07 " FRACTION_CRVIMX wasn't being initialized for the
RHO_CVIMX > 0 case (no XNLCON() read if the
analogous CRVIMX constraint is omitted).
12/11/07 " The "NOCUSP" option now imposes 3rd derivative
continuity to ensure smooth curvature.
12/12/07 " Save the centerline curvature distribution for
plotting comparisons (see SUMMARY).
01/07/08 " PERTURB wasn't constraining all spokes for
maximum curvature in the radial direction.
02/06/08 " Added Gaussian curvature constraints (maximum
and total violation of target minimum).
02/19/08 " Omit i = 1 from Gaussian curvature violation
calculation (collapsed cells); expand summary
information so all controls are apparent.
02/21/08 " Replace unused RHO_CG_OFFSET with RHO_TVD_GC
as a way of smoothing Gaussian curvature
on the surface grid (and hence of smoothing
the geometry).
02/23/08 " RHO_TVD_GC doesn't seem to be effective for
asymmetric cases, possibly because the grid
lines don't follow the varying shoulder.
Therefore, suppress the contributions in the
azimuthal direction.
09/29/08 " A slight weakness for off-center apex cases has
been the fact that opposing defining spokes do
not necessarily meet smoothly except for the
imposed zero first derivative. Centerline
curvature can therefore be discontinuous. What
second derivative to impose there? About the
only choice is the average of the two, and this
can only be done after the existing "no cusp"
scheme has been applied to all spokes. It needs
new 6th-degree polynomial routine POLY6.
12/06/10 " Improved the radial point distribution options
for better resolution of forebody shoulders:
(1) If R*_SPL < 0, reverse the distribution, as
found helpful with 0.04, 0, 0.3, 0.66 inputs;
(2) If R*_SPL = 1, use curvature-based spacing;
see further details above.
12/14/10 " Belated retrofit of common symmetric shapes:
calculate the generatrix directly instead of
reading it from heat_shield.geo if the file
heat_shield.analytic is found. See more above
near GEOMETRY NOTES.
02/04/11 " Setting CO_INIT(1) to RADIUS_BASE was wrong for
the analytic case: it should be RO_INIT(NGEOM).
10/25/11 " Added the biconic option to the analytic case,
via the same heatshield.analytic geometry file.
The number of lines in the file distinguishes
it from the sphere-cone/spherical-section case.
ORIGINAL RESEARCHER: ORIGINAL CONSULTANT:
James Reuther, Peter Gage,
ASA Branch, ELORET Corporation/NASA Ames,
NASA Ames Research Center, Moffett Field, CA
Moffett Field, CA
ORIGINAL SOFTWARE AUTHORS:
James Reuther, ASA Branch, NASA Ames Research Center
David Saunders, ELORET Corporation/ASA Branch, NASA Ames
CURRENT EXTENSIONS (2007-2008):
Roman Jits and ELORET Corporation/TSA Branch, NASA Ames
David Saunders (now ERC, Inc./TSA/NASA Ames)