PEGASUS 5 Current Status
This web page is meant to be a bulletin board for users of the PEGASUS
code, so that they can be kept apprised of known problems and bugs, new
releases, on-going work, and other operational issues. This is
created in an effort to promote the use of the PEGASUS 5
software and to provide a central location for users to share
their wisdom and experiences. In addition, anyone with the time and
ability to work on further development and/or bug fixes for the
software is encouraged to do so, and to share their results. Thus, a
"To Do" list is included below. Any improvements to the code can be
sent via email to rogers@nas.nasa.gov
for inclusion into the next release.
Other PEGASUS 5 resources include:
Contents:
News
- Dec 20th, 2004: Fixed an array-bounds bug
- Dec 16th, 2004: Fixed bug with VOLUME arrays
- Oct 14th, 2003: Released version 5.1k.
- July 16th, 2003: MPI Bug limits number of CPUs
- Dec 5th, 2002: QCUTOFF should not be 0
- Apr 23th, 2002:
AIAA Paper 2002-3186 on PEGASUS5 is available
- Apr 18th, 2002: Phantom-mesh bug in auto-hole cutting
- Mar 18th, 2002: Released version 5.1j.
- Jan 14th, 2002: 2nd-fringe ORPHAN bug in version
5.1i
- Nov 14th, 2001: Allocate bug in peg_hole_surf
- Oct 11th, 2001: Orphan counting bug in version 5.1i.
- Sept 24th, 2001: Benign bug in version 5.1i.
- Sept 10th, 2001: Released version 5.1i.
- July 13th, 2001: Released version 5.1h.
- June 22nd, 2001:
PEGASUS 5 Examples On-line
- May 31st, 2001: Released version 5.1g.
Current Release : PEGASUS Version 5.1k
Changes made in version 5.1k include a number of bug fixes and minor
enhancements. See the 5.1k release notes
below for more details.
Changes made in version 5.1j include:
A modified stencil search and several bug fixes. See the 5.1j release notes below for more details.
Changes made in version 5.1i include:
Improvements to the interpolation stencil searches, resulting in fewer
ORPHANS for nearly all cases, and modifications leading to improved
performance for stencil searches; fixed bug for projection which would
cause bad problems for meshes with both viscous and inviscid walls;
fixed bug in namelist input: reading lines greater than 80 characters;
rewrote mesh_lister and peg_orph programs; minor changes and fixes for
Cray and HP. See the 5.1i release notes
below for more details.
Changes made in version 5.1h included:
A fix for the HP compiler and pgif90 compiler problems which resulted
in extremely slow execution (this was present only in 5.1g); fixing of
a number of memory leaks; more graceful abort for fatal errors,
including cleaning up and properly aborting all mpi processes; the
addition of the INTERNAL variable in the $HCUT namelist, which will
enable to perform auto hole cuts for internal flow problems; and new
versions of peg_mem, peg_in, and peg_hole_surf.
See the 5.1h release notes below for more details.
Changes made in the previous 5.1g release included an MPI parallel
option, fixes for several bugs, and implementation of the mesh scaling,
translation, and rotation capability.
See the 5.1g release notes below for more details.
This software package can be requested and used by U.S. citizens and
permanent residents belonging to a U.S. organization.
Here are your options in obtaining this version:
- If you have already signed a NASA Non-Disclosure agreement
for PEGASUS 5, send email to Stuart Rogers at
rogers@nas.nasa.gov
and request a copy.
- Fill out, sign, and submit a
NASA Non-Disclosure agreement for PEGASUS 5. Start this process at
the
NAS Software Distribution page.
Known Bugs and Problems, and Suggested Work Arounds
- Exceed array bounds for certain $VOLUME RANGE inputs:
There is a bug wherein array indices are exceeding the array bounds
when the an $VOLUME namelist input includes [JKL]RANGE inputs that
include 0 or [JKL]MAX+1. This could cause a segmentation fault. This
bug exists only in version 5.1k. The fix will be distributed with
version 5.1l, or by downloading this source file:
mod_spec_level1.F90
- Array allocation BUG for $VOLUME inputs:
There is a bug where a temporary array was being
allocated with the wrong size. This array was used to store the j,k,l
ranges defined in the $REGION and $VOLUME namelist inputs. If you have
fewer $SURFACE than $VOLUME inputs it would not allocate enough space,
and could lead a bus error or segmentation fault. This bug exists
in version 5.1k and all previous versions.
On a number of systems (various SGI workstations, SGI Origin, SGI
Altix with Intel version 7 compilers, Linux Pentium with PGI compiler)
I have a test case that worked just fine, even though it has 2 $VOLUME
inputs and no $SURFACE inputs. On our SGI Altix and Intel version 8
compilers, it causes a bus error. I have heard of this happening on
other linux clusters as well.
The bug details: in subroutine set_iregion_inp in mod_spec_int1.F90: the
temporary arrays [jkl]rangev_tmp are allocated with (2,nsurf),
but should be allocated with (2,nvol). A fixed version of this file here:
mod_spec_int1.F90
- Automatic holes cut away overlapping solid-wall surfaces:
This is the worst known problem with the current automatic
hole-cutting algorithm. This situation was improved in version 5.1f;
(see the 5.1f release notes for a
description), but still can be an issue requiring more user input. In
regions right at the wall at the edges of overlapping surfaces, the
automatic hole-cutting operation will sometimes cut very small, thin
holes in the overlapping surface grids, where no holes should be cut
at all. The easiest workaround is to use the EXCLUDE variable in the
$HCUT namelist. To do this, add
the name of the grid(s) which get cut by the the bad hole-cuts to the
EXCLUDE list, and these grids will not get cut by this $HCUT hole
cutter. If your initial input file did not contain any HCUT namelist
(and thus used only the default values for the automatic hole
cutting), you can add input that looks like this:
$HCUT NAME = 'hcutter1',
EXCLUDE = 'grid5', 'grid7',
$END
This work-around is only possible for certain grids, however, as one
often needs to have holes cut from these types of grids, and they
cannot be excluded altogether from the automatice hole-cutting.
Alternatively, one can unblank a subset of points of a particular
grid, this excludes these points from being cut by any of the
hole-cutting operations using. This option uses the REGION and VOLUME
namelists. For example:
$REGION NAME = 'Do_not_cut_these_points'
ISPARTOF = 'grid5',
TYPE = 'UNBL',
$END
$VOLUME ISPARTOF = 'Do_not_cut_these_points'
JRANGE = 1,80,
KRANGE = 1,-1,
LRANGE = 1,10,
$END
- Automatic holes too small near thin bodies:
As described and illustrated in Section 4.4.2
of the PEGASUS Users Guide, this problem is
characterized by ORPHAN points left inside a thin body, such as a thin
trailing edge of a wing or nacelle. The issue is that the cell size
of the Cartesian hole map can be larger than the thickness of the
body. This situation was greatly improved in version 5.1f;
see the 5.1f release notes for a description.
The easiest work-around is to increase the OFFSET input
variable for the grid which contains the ORPHANS points. If this does
not work, one can also try increasing the resolution of the Cartesian
hole map by increasing the values of CNX, CNY, CNZ. This approach
can result in a significant increase in CPU time and memory.
- Automatic holes leave points inside collar grids
This is a bug/feature of the automatic hole cutting involving the
intersection of two bodies or components which uses a collar grid.
It is typical to see one or two layers of ORPHANed grid points which
lie inside one of the intersecting bodies (like a wing) and which lie
on or just above the surface of the other intersecting body (like a
fuselage). The situation was greatly improved in version 5.1f;
see the 5.1f release notes for a description.
The suggested work-around is to increase the OFFSET input
variable for the grid which contains the ORPHAN points; this will
make the automatic hole larger, and usually removes the ORPHANS.
- Automatic holes in box grids too close to solid surfaces:
This is not a bug, but can be a problem if a surrounding Cartesian box
grid is as fine or finer than the outer region of a body-fitted grid
which is embedded inside the Cartesian box grid.
The additional automatic hole-cutting of box grids added in
version 5.1e improves some of these cases.
Additional improvements in these holes can be made by: increasing the
OFFSET input variable for the box grid; increasing the resolution of
the body-fitted grid; and/or increasing the outer-boundary distance of the
body-fitted grid.
- FIXED! MPI Bug limits number of CPUs: FIXED! There is a bug which can
cause problems with the MPI version of pegasus5 when running with more
than 14 processors. There is an improperly dimensioned array called
p_barrier in mod_execute_processes.F90. This can cause the code to
terminate when running with more than 14 processors. My experience on
hundreds of runs on SGI Origin systems, and a few runs on one Linux PC
cluster with more than 14 processors is that it normally executes
pegasus5 successfully, but can produce garbage data in the last few
lines of the log file where it lists the time used by each
sub-process. However, this has been known to cause execution failures
on Linux PC clusters when running with more than 14 processors.
The bug was fixed in version 5.1k; p_barrier is now dimensionsed with
an allocate statement.
- FIXED! QCUTOFF should not be 0: FIXED!
In all versions prior to 5.1k, the default value for the interpolation
stencil quality cut-off (QCUTOFF) was 0.0. QCUTOFF is an input
variable in the $GLOBAL and $MESH nameslists. It is recommended that
the global QCUTOFF be increased to at least 0.1, which will be the new
default value in version 5.1k. The value of QCUTOFF=0.0 can cause
PEGASUS 5 to accept interpolation stencils where the donor vertices
are all interpolation boundary points themselves. If these vertices
also have quality 0.0 stencils, it is possible for all of these points
to permanently retain their initial freestream values in the
flow-solver. The worst case occurs when one has a point-wise
continous overlapping pair of grids with only one cell of overlap. If
these grids are run with FRINGE=2 and QCUTOFF=0.0, then PEGASUS5 will
happily provide two layers of interpolation stencils for both grid
boundaries. All of these interpolation stencils will have a stencil
quality of 0.0, and in the flow solver their solution will never
change from their initial free-stream values. Note that the default
value of FRINGE is 1 in PEGASUS 5, but that the peg_setup script will
create a peg.in.raw file which has FRINGE=2. In version 5.1k this
will be changed such that the peg.in.raw file will not specify a value
for FRINGE, so that by default FRINGE=1 will be used.
To summarize, it is recommended that one runs PEGASUS5 with the following:
- Set QCUTOFF = 0.1 in the $GLOBAL namelist.
- Use FRINGE = 2 only if your grids have enough overlap to support 2 fringe levels.
If you have any critical CFD calculations which used
PEGASUS 5 with the default value of QCUTOFF=0.0, is recommended that
you re-run PEGASUS 5 for one of your cases with QCUTOFF=0.1. If this
new run produces a significant number of additional ORPHAN points and
FRINGE=2 was used, try reducing to FRINGE=1. Also, if the new run
produces more ORPHAN points than before, it is recommended that you
re-run your flow solver using the new QCUTOFF=0.1 grid system to
evaluate any possible negative effects on the solution accuracy.
This bug was fixed in version 5.1k.
- FIXED! Phantom meshes not used in auto hole cutting FIXED!
A bug exists in the automatic hole cutting in which it excludes the
solid-wall surfaces in a phantom mesh from the hole-cutting process.
The original documentation does indicate that phantom meshes can be
used to close gaps and leaks in the solid-wall surface used in cutting
holes. This bug was fixed in version 5.1k, and has existed in all
versions prior to 5.1k.
- FIXED! 2nd fringe ORPHAN bug in version 5.1i: FIXED!
A bug exists in the creation of the final XINTOUT iblank array,
where it is classifying ORPHANS as either 1st fringe or 2nd fringe.
It will incorrectly classify certain ORPHAN points as 1st fringe
instead of 2nd fringe, if they are adjacent to any level 2
interpolation points. The bug has no effect if ORPHFIX=.FALSE.
Otherwise, this might cause some 2nd fringe ORPHANS to not be fixed,
which usually has only a negligable effect. However, in one
instance, this caused a major instability to develop in the flow
solver. This occured where there was a cluster of 2nd-fringe ORPHANS
near a solid surface. PEGASUS5 correctly "fixed" one of the points
next to the surface, but incorrectly left other points around it as
ORPHAN points. This one point was in a high flow-gradient region,
and the flow-solver tried to push the solution on this one point
one way, and the ORPHAN-point averaging of the surrounding points
pushed the solution another way, causing huge oscillations leading to
a numerical instability. This bug has existed since the original
release version of pegasus5, and is fixed in verison 5.1j.
- FIXED! peg_hole_surf allocate bug in version 5.1i: FIXED!
The utility peg_hole_surf
has a bug when using multiple HCUT namelists. The bug was fixed
in version 5.1j.
- FIXED! Orphan counting bug in version 5.1i: FIXED!
In mod_xintout.F90, line 847 (of version 5.1i), in subroutine
check_orphans: a typo was causing an l-index to be incorrectly limited
by kmax instead of lmax. The line reads: "lp1 = min(l+1,kmax)" and
instead should be: "lp1 = min(l+1,lmax)." This bug has existed since
the original release version of pegasus5. This could have the effect
of counting a 1st-fringe orphan as 2nd-fringe orphan, or visa-versa.
In the first case, if orphfix=.true., it could also then incorrectly
set the iblank array so that a 1st-fringe orphan is not flagged as an
orphan. It could also cause it to access memory outside the bounds of
a dynamically allocated array, which could cause a segmentation
violation. The bug was fixed in version 5.1j.
- FIXED! Bug in version 5.1i: FIXED! A subroutine call in
interpolate.F90 is missing two arguments, which are only used when the
code is compiled with the -DDEBUG option. So if your compiler does
not stop with a fatal error, this bug is benign. This was fixed in
version 5.1j.
- FIXED! BUG in namelist-like reading of pegasus input file: FIXED!
All versions previous to 5.1i will fail to properly read lines in
the pegasus5 input file which are greater than 80 characters. Some of
the pegasus tool programs also have this bug. In certain instances,
the peg_in program (which is executed by the peg_setup
script) distributed with version 5.1h will generate a peg.in.raw file
with lines longer than 80 characters for the $MESH namelist. This was
fixed in release 5.1i such that pegasus5 and the tools will process up
to 132 characters on a line.
- FIXED! BUG in implementation of $REGION TYPE='INTR': FIXED!
Fixed in release 5.1h. In previous versions,
This type of REGION did not work as documented: the interior points
for these regions never got blanked out.
- FIXED! MESH translation and rotations are not implemented: FIXED!
Fixed in release 5.1g; see the 5.1g release notes
for a description.
The input variables X0, Y0, Z0, XR, YR, ZR, ALPHA, BETA, and GAM
are never used in the code in versions prior to 5.1g.
- FIXED! Restart bug when changing a grid: FIXED!
Fixed in release 5.1g; see the 5.1g release notes
for a description.
Previous to version 5.1g,
There was no dependency on the WORK/INTRP_DIR/.adt files built into
the restart process. If the original mesh files are modified, the
alternating-digital search tree for the mesh was not updated, and could
cause the interpolation to spend too much CPU time searching for
interpolation stencils, or to produce bad stencils. The work around
was to delete the adt files by hand when a mesh had been modified.
- FIXED! Projection bug: FIXED!
Fixed in release 5.1g; see the 5.1g release notes
for a description.
Prior to verison 5.1g, the projection algorithm used an
inviscid wall to project a viscous wall, and would project a viscous
wall onto an inviscid wall. An inviscid wall should never have been used
in the projections.
- FIXED!! Automatic holes do not cut large box grid cells FIXED!!
Fixed in release 5.1e; see the 5.1e release notes
for a description. If the automatic holes in any of your grids
are too small, increase the input variable OFFSET for the mesh in
which you want a larger hole.
- FIXED!! Large-hole restart BUG in automatic hole cutting: FIXED!!
Fixed in release 5.1e; see the 5.1e release notes
for a description.
- FIXED!! Restart bug, projections, and interpolation: FIXED!!
Fixed in release 5.1f; in previous versions,
if a restart was performed after changing a projection input variable
(such as DISTANCE or ANGLE) such that the code had to re-calculate the
projection displacements, the code did not re-calculate the effected
interpolations stencils. Thus, the effect of the new projections were
lost on the interpolation, possibly resulting in ORPHANS near a
solid surface.
- FIXED!! Hole-cutting Restart bugs: FIXED!! Restarting
with changes to the HCUT
namelist input variables CNX,CNY,CNZ, CARTX, CARTY, and CARTZ
did not cause the code to redo the hole cutting. Fixed in version 5.1f.
- FIXED!! Hole unblanking does not work: implementation of
REGION TYPE='UNBL' (which has the effect of unblanking
a specified subset of a grid) never worked correctly. Fixed in
release 5.1f.
Current Development
Known current development activities are listed here.
Bug fixes. Continuing to work on improvements to
the automatic hole cutting. One area being investigated is the
use of an unstructured Cartesian hole-cutting map with
adaptive sizing for the Cartesian elements.
Release Notes
Version 5.1k Modifications
- Fixed bug: solid walls in phantom meshes were not used in auto hole cutting
surfaces. Any solid wall specified in part of a phantom mesh is now
utilized by the auto-hole cutting.
- Fixed bug in default value of QCUTOFF: increased from 0.0 to
0.1. See detailed discussion on the implications of this in the
section on Known Bugs
- Fixed bug in MPI coding that limited the number of CPUs. The bug
potentially caused problems when pegasus5mpi was used with more then
14 processors, due to an improperly dimensioned array.
- Fixed bug in fixing of 2nd-fringe orphan ponts on periodic
grid planes.
- Made changes to allow REGION/VOLUME of type INTR to blank out a region
extending to the boundary. Added this feature in the documentation for
type INTR. Now it excludes any points in a VOLUME of type INTR from the list
of single and double fringes. Fixed restart dependency: the list
of fringe points was not rebuilt when the interior volume range
input was changed.
- Added --with-byteswapio option to the configure script for
Portland group compilers. Added workaround for Portland compiler
version 5.0-2: internal compiler error when using -fast flag;
changed configure script to use "-fast -Mlre-noassoc" with pgi compilers;
This compiler bug is supposed to be fixed in their next release; this
does not slow the code down.
Version 5.1j Modifications
- Modifications where made to the interpolation stencil searchs
to make them more efficient and more robust for certain cases. This
will cause 5.1j to produce slightly different results than previous
versions. Extensive testing has shown that 5.1j produces the same or
fewer orphan points, and runs in slightly less computing time.
- Fixed several bugs, including: typo in index limit in do loop
when creating the XINTOUT file which would cause wrong count of 1st
or 2nd fringe orphans; fixed some coding errors inside some DEBUG
statements; fixed bug in mod_spec_int2 which could cause the code to
bomb for periodic o-grids in k; fixed memory allocation error in
peg_hole_surf utility which would bomb for multimle hole cutters.
- Modified peg_in for flow-through bc: simplified coding for first
part which adds the ityp=51,52, or 53. Added more checks to detect
a wingcap topology to fix cases where it was incorrectly adding
ityp=-1 surfaces for a wingcap wake.
Version 5.1i Modifications
- Improvements to the interpolation stencil searches, resulting in
fewer ORPHANS for nearly all cases tested. These mostly involved grid
topology checks such that the stencil walk could more readily jump
across O-grid periodic boundaries and C-grid flow-through boundaries.
With the use of rotated bounding boxes for each mesh, was able to
eliminate stencil-walk searches for many points outside of donor
meshes.
- Fixed bug for projection which would cause bad problems for
meshes with both viscous and inviscid walls. The projection
subroutines were still using some data from the auto-hole cutting wall
arrays. Added projection output to the log file indicating the number
of points which were not projected due to ANGLE and DISTANCE restrictions.
- Fixed bug in namelist input which would fail when reading lines
greater than 80 characters. Can now read up to 132 characters on a line.
- Added minor changes and fixes for Cray and HP compilers. This
included the addition of a false Fortran 90 module for mpi, as these
compilers fail on the Fortran 90 statement "use mpi".
- Rewrote the mesh_lister and peg_orph programs: better output,
more error checking.
Version 5.1h Modifications
-
A fix for the HP compiler and pgif90 compiler problems which resulted
in extremely slow execution (this was present only in 5.1g).
-
Fixed a number of memory leaks, resulting in lower memory requirements.
-
Implmented a more graceful abort for fatal errors,
including cleaning up and properly aborting all mpi processes;
-
The addition of the INTERNAL variable in the $HCUT namelist, which will
enable to perform auto hole cuts for internal flow problems
-
Re-wrote peg_mem to give realistic estimates, and to be much
easier to use: it gets its input from peg.in and X_DIR files instead
of prompting the user for information.
-
Re-wrote peg_hole_surf so it gets its input from peg.in and X_DIR.
-
Wrote a new version of the peg_in program which will provide
[jkl]include in the $MESH namelist which will exclude symmetry
planes and solid walls automatically.
- Fixed a bug in the implementation of $REGION TYPE='INTR'. In previous
versions, This type of REGION did not work as documented: the interior
points for these regions never got blanked out.
Version 5.1g Modifications
This release includes an MPI parallel option, fixes several bugs,
a modification to the level-2 fringe algorithm, and
implements the mesh scaling, translation, and rotation capability.
NOTE: one should not attempt to perform a restart execution of
Version 5.1g using a WORK directory from a previous verison.
Because of the bug-fixes to the interpolation stencil search, and
improvements to the level 2 fringe selection (changes 3-5 below),
version 5.1g will produce a slightly different XINTOUT files
than previous versions. Several OVERFLOW runs comparing the grid
systems computed by 5.1f and 5.1g show only a slight changes in the
flow solution. For two different aircraft configurations, changes in
computed lift and drag coefficients were on the order of 0.1%.
NOTE for Portland Group Compiler Users: change in version 5.1g have
created very large performance degradation (factor of 100 slower)
in a test of this version on a Red Hat 6.2 Linux PC.
UPDATE: This has been fixed in the 5.1h release. This was
identified as a compiler bug by the Portland Group support, but a
coding work-around was enables in version 5.1h.
Specific changes in version 5.1g include:
- Added MPI parallelization option. See the User's Guide sections
for details on compiling and
running this option.
- Modified output: all output is written to the log.dddd.tttt file
(where dddd is the date, tttt is the time). Only error messages are
written to stdout.
- Fixed EPS interpolation stencil bug: for cases where a non-default
value of the GLOBAL or
MESH namelist input variable
EPS was specified, some of the interpolation stencils output
in the XINTOUT file would have errors as large as one grid cell. This
could have produced significant errors in the solution.
- Fixed interpolation stencil bug: for certain degenerate grid
cells, such as those around a singular axis, bogus interpolation
stencils were being generated. The code was not performing a check
on the convergence of a newton stencil walk when computing
interpolation weights for level 1 and level 2 interpolation.
Rewrote the interpolation routines, changing from Fortran 77 to
Fortran 90 coding. Replaced two different implmentations
of the newton stencil walk with a single version, which is now
used in several parts of the code.
- Modified the level2 fringe point algorithm.
When computing cell-difference, compute the donor-cell weights, and
then shift the donor j,k,l index so that the donor cell which is being
measured is the one closest to the fringe point under consideration.
This removes a randomness and directional bias in the level 2 fringes for
pointwise matching grids, and fixes a problem which caused the
INS3D
flow solver stability problems.
- Implemented the scaling, translation, and rotation of mesh
coordinates using the
MESH namelist input variables SCALE, X0, Y0, Z0,
XR, YR, ZR, ALPHA, BETA, GAMMA. In previous versions of the
code these values were read in but never used. Changed the input
names from ALFA to ALPHA and GAMA to GAMMA. Implemented mesh
coordinate transformations in the tool programs peg_plot, peg_proj,
peg_hole, and XINtegrity.
- Added projection displacements to coordinates in XINtegrity so that
this utility can be used for the first time with problems which include
projection.
- Fixed projection bug: no longer use inviscid walls or ibtyp=-1
solid walls for projection surfaces.
- Fixed restart bug: modification of an existing input volume
grid file (X_DIR/*.x) did not cause the code to update the internal
alternating-digital-tree (adt) map for the modified mesh. This could
cause failed searches or segmentation violations.
- Changed default name of $HCUT NAME from "HOLE CUTTER" to "HOLE_CUTTER".
- Fixed restart bug for manual hole-cutting: was not re-cutting when
adding/changing $BOX namelist inputs.
- Changed reading of logical namelist value to check for both upper
and lower case T or F.
Version 5.1f Modifications
This version includes several modifications to the automatic
hole-cutting routines, which results in an increase in computer time
in the autocut process, adding about 25% more to the total execution
time. Also, one should not attempt to perform a restart execution of
Version 5.1f using a previous verison 5.1e run. Specific changes include:
- Implemented several modifications to the automatic hole-cutting
algorithm. In regions of overlapping solid-wall surfaces, attempt to
combine overlapping surface elements (which are represented as
triangles) into a unique set of non-overlapping Delauny trianges
used for the clear-line-of-sight (CLOS) test.
This fixes most, but not all, instances of the bad holes being cut
into overlapping solid walls. Also forced CLOS test to examine all
of the neighboring Cartesian hole-map elements, and then use majority
to determine inside versus outside.
- Added step to automatic hole-cutting process, which blanks points
on a solid wall when their neigbhoring point just above the wall is blanked.
This improves the hole cutting for intersecting bodies and collar grids.
- Added step to automatic hole-cutting process which will blank
certain unresolved points with no clear line of sight to an inside
or outside element. This examines the normal vectors of near-by
walls, and blanks the point if it appears to be on the inside of
all the walls. This dramatically improves problems with ORPHAN
points left inside of thin bodies, such as thin trailing edges
in wings.
- Added -sp option to the utility programs peg_hole,
peg_hole_surf, peg_diag, and peg_proj. The -sp flag
forces these utilities to write single-precision output grid
and/or solution files.
- Fixed bug in execute_comp_hole: implementation of REGION
TYPE='UNBL' (which has the effect of unblanking a specified subset of
a grid) never worked correctly.
- For 2D problems, added check to ensure that holes will be the
same on all three of the computational planes in the third direction.
- Fixed restart bug with projections: previously, changes to input
variables which control projection did not force the code to re-do
the interpolations, and thus the change in the projections was never
used.
- Fixed error checking for $BOUNDARY namelist: made it OK for
BOUNDARY to not specify ISPARTOF, as long as SURFACE specifies MESHNAME.
Added error checking for $SURFACE namelist, checked that MESHNAME matches
an existing mesh name. Changed MESH NAME to MESHNAME in documentation for
SURFACE namelist.
- Fixed bug when checking manual hole-cutting inputs. If the
number of surfaces was zero, it got stuck in an infinite loop
- Fixed bug specifying outer boundaries: it was setting second
fringe points at outer boundaries, in some cases setting boundary
points as fringe points, resulting in ORPHANS on solid walls.
Changed the index limits: only need to go all the way to the edge
for periodic grids.
Version 5.1e Modifications
- Additional automatic hole-cutting operation for Cartesian box
grids: This additional hole-cutting step will blank out cells of a
Cartesian box grid which contain a solid-wall boundary point. This
fixes the problem of PEGASUS auto hole cutting unable to blank out
large Cartesian box-grid cells which completely surround a solid body
and which do not have any vertices inside the solid body. The
previous workaround, which did not always work, was to increase the
OFFSET input parameter to values in the range 3 to 7 for Cartesian box
grids. This is no longer necessary, and thus, an appropriate value
for OFFSET for a Cartesian box grid is in the range 0 to 2, which is
the same appropriate range for body-fitted volume grids.
- Fixed large-hole restart BUG in automatic hole cutting:
This bug would cause a failure of the automatic hole cutting during a
restart run. The failure was characterized by a very large
rectangular hole: all points inside the min/max box of the hole cutter
would be blanked out. The bug was a failure to initialize the
variable ilen in mod_hole_octree during a restart run.
This caused all of the cartesian cells in the hole map to be labeled
as INSIDE the solid body.
- Fixed bug with Level 2 interpolation for periodic
O-grids: Previously, the Level 2 interpolation would not provide
interpolation stencils for points on a periodic plane. For example,
consider a volume grid which is periodic in K, and has significant
overlap with a neighboring grid, and which a body-normal direction in
L, with an outer boundary at L=LMAX. Level 2 interpolation might
provide stencils at points L=-10,-1 for all J and all K, except points
on the K=1 and K=KMAX planes. This bug has been corrected such that
Level 2 interpolation will provide stencils for all K points in a
periodic grid. This bug was causing major problems with the flow
solution in the vicinity of a the periodic planes.
- Fixed bug with periodic O-grid outer boundaries:
The code will now produce outer-boundary interpolation stencils on the
edges of a periodic plane. For example, consider an O-grid which is periodic in
the K-direction, and has an outer-boundary at L=LMAX which requires
interpolation stencils. Previously, PEGASUS would not provide
stencils on the edges given by {J=1,JMAX;K=1;L=LMAX} and
{J=1,JMAX;K=KMAX;L=LMAX}. This could cause a minor glitch in the flow
solution in this vicinity.
- Modified the clean_holes script:
No longer remove contents of WORK/HCUT_BC_DIR, since this forces the
code to redo the projections, and thus also the interpolations.
If this level of restart is required, the entire problem should be
re-run from the beginning by removing the entire WORK directory.
- Modification for LINUX:
Modified interpolate.F90 to change strange behavior on LINUX with pgf90
compiler: in first pass through interpolate, zmaxg and zming were always
computed to be nan after this statement:
zmaxg = zmaxg + dztol
zming = zming - dztol
even though before this point, zming and zmaxg and dztol are all
valid numbers. Mysteriously, the problem goes away if the previous lines:
dxtol = rvap*(xmaxg - xming)
dytol = rvap*(ymaxg - yming)
dztol = rvap*(zmaxg - zming)
are switched to this ordering:
dztol = rvap*(zmaxg - zming)
dytol = rvap*(ymaxg - yming)
dxtol = rvap*(xmaxg - xming)
With this change, version 5.1e seems to work OK on LINUX with the
pgf90 compiler, after only limited testing, including the examples
cases naca_airfoil, 30p30n_airfoil, and sphere.
Version 5.1d Modifications
- Fixed bug in automatic hole cutting: Was never allowed to
blank points which were part of a surface which had a specified
boundary condition. This caused major problems with O-grid periodic
surfaces, and some other cases. This, however, magnifies the problem
with erroneous hole cuts at overlapping surfaces.
- Fixed bug with GLOBAL namelist CARTX,CARTY,CARTZ inputs:
These user input values were not overriding those calculated
internally. Added CARTX, CARTY, CARTZ to HCUT namelist variables.
Added description of CART[XYZ] to the Users Guide (these were
previously undocumented).
- Set default value of $GLOBAL orphfix to .TRUE.
- Fixed bugs in peg_in.F90: was adding wrong IBDIR for
duplicate boundary condition on O-grid periodic plane, and for
IBTYP=54-59; was not processing IBTYP=51-59 properly; fixed IBTYP=-1
bug, adding of IBTYP=-1 extensions to TE was failing because logical
variable wingcap was never initialized. Added -no_add_te flag to
peg_in.
- Fixed bug in peg_plot.F90: -sp and -dp flags were not
coded properly. Caused CRAY or single-precision executables to not
write the x,y,z,iblank data unless using -sp,-dp flags. Removed -dp
flag; -sp flag can be used if the code was compiled as
double-precision. Added description of -sp to Users Guide.
- Fixed bug in peg_plot.F90: was assigning all ORPHAN points
an iblank value of 101, ignoring the effect of ORPHFIX. By default,
it now only sets iblank=101 for level ORPHANs; added the -noorphfix
flag, which causes level 2 ORPHANS to be flagged with iblank=101.
- Changed q5 field in peg_diag Changed output q file from
0.0 everywhere, to 0.0 at the field points, -1.0 for orphan points,
and connecting mesh number at all legal l1 and l2 boundary points.
- Modifications for compiling on LINUX: modified a number of
files to fix compiler problems on LINUX systems: both Compaq Alpha
Fortran 90 compiler, and Portland Group pgf90 compiler. Added
--with-pgi flap to configure script.
- Additional error checks: ensured that boundary condition
indicies and IBDIR are within an acceptable range; ensure that mesh
names given in BCINP and BOUNDARY input refer to existing meshes.
To Do List
In addition to working on the Known Bugs and
Problems listed above, here are more things to work on for PEGASUS 5.
- Investigate pruning away fringe levels greater than 3 (or 2) after
the level 2 interpolation.
- Investigate letting level 2 interpolation find stencils on
boundary points, not just interior points.
- For cases with a symmetry plane, add a feature to automatically
cut away grid points which stray onto the wrong side of a symmetry plane
- Projection issues: need to report number of points not projected due
to the DISTANCE and ANGLE restriction.
- Routines for manual hole cuts are still written in Fortran 77.
Does this slow it down?
- Execution times on a Cray C90 are about 5 times slower than an SGI
Octane R12K 300 Mhz processor, which is about 10 to 20 times slower
than they ought to be. Investigate and improve C90 performance.
-
Spew table showing how many stencils come from each zone in the
peg_diag utility.
- For symmetry boundary condition IBTYP=17 BC, it should read in
grid to determine which physical plane is the symmetry plane, and
accordingly automatically set XSYM, YSYM, or ZSYM.
|
Updated: Monday, 20-Dec-2004 14:09:43 PST
WebWork: Stuart E. Rogers
<rogers@nas.nasa.gov>
NASA Responsible Official:
Stuart Rogers
|
|