Download Latest Version geomlib.tar.gz (58.3 kB)
Email in envelope

Get an email when there's a new version of CFD Utilities

Home / HEAT_SHIELD
Name Modified Size InfoDownloads / Week
Parent folder
README 2013-10-29 30.5 kB
Totals: 1 Item   30.5 kB 0
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)
Source: README, updated 2013-10-29