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

  1. Dec 20th, 2004: Fixed an array-bounds bug

  2. Dec 16th, 2004: Fixed bug with VOLUME arrays

  3. Oct 14th, 2003: Released version 5.1k.

  4. July 16th, 2003: MPI Bug limits number of CPUs

  5. Dec 5th, 2002: QCUTOFF should not be 0

  6. Apr 23th, 2002: AIAA Paper 2002-3186 on PEGASUS5 is available

  7. Apr 18th, 2002: Phantom-mesh bug in auto-hole cutting

  8. Mar 18th, 2002: Released version 5.1j.

  9. Jan 14th, 2002: 2nd-fringe ORPHAN bug in version 5.1i

  10. Nov 14th, 2001: Allocate bug in peg_hole_surf

  11. Oct 11th, 2001: Orphan counting bug in version 5.1i.

  12. Sept 24th, 2001: Benign bug in version 5.1i.

  13. Sept 10th, 2001: Released version 5.1i.

  14. July 13th, 2001: Released version 5.1h.

  15. June 22nd, 2001: PEGASUS 5 Examples On-line

  16. 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:




Known Bugs and Problems, and Suggested Work Arounds

  1. 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

  2. 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

  3. 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
    

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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:

    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.

  9. 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.

  10. 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.

  11. 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.

  12. 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.

  13. 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.

  14. 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.

  15. 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.

  16. 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.

  17. 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.

  18. 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.

  19. 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.

  20. FIXED!! Large-hole restart BUG in automatic hole cutting: FIXED!!
    Fixed in release 5.1e; see the 5.1e release notes for a description.

  21. 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.

  22. 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.

  23. 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

    1. 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.

    2. 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

    3. 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.

    4. Fixed bug in fixing of 2nd-fringe orphan ponts on periodic grid planes.

    5. 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.

    6. 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

    1. 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.

    2. 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.

    3. 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

    1. 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.

    2. 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.

    3. 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.

    4. 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".

    5. Rewrote the mesh_lister and peg_orph programs: better output, more error checking.

    Version 5.1h Modifications

    1. A fix for the HP compiler and pgif90 compiler problems which resulted in extremely slow execution (this was present only in 5.1g).

    2. Fixed a number of memory leaks, resulting in lower memory requirements.

    3. Implmented a more graceful abort for fatal errors, including cleaning up and properly aborting all mpi processes;

    4. The addition of the INTERNAL variable in the $HCUT namelist, which will enable to perform auto hole cuts for internal flow problems

    5. 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.

    6. Re-wrote peg_hole_surf so it gets its input from peg.in and X_DIR.

    7. 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.

    8. 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:

    1. Added MPI parallelization option. See the User's Guide sections for details on compiling and running this option.

    2. 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.

    3. 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.

    4. 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.

    5. 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.

    6. 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.

    7. Added projection displacements to coordinates in XINtegrity so that this utility can be used for the first time with problems which include projection.

    8. Fixed projection bug: no longer use inviscid walls or ibtyp=-1 solid walls for projection surfaces.

    9. 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.

    10. Changed default name of $HCUT NAME from "HOLE CUTTER" to "HOLE_CUTTER".

    11. Fixed restart bug for manual hole-cutting: was not re-cutting when adding/changing $BOX namelist inputs.

    12. 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:

    1. 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.

    2. 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.

    3. 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.

    4. 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.

    5. 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.

    6. For 2D problems, added check to ensure that holes will be the same on all three of the computational planes in the third direction.

    7. 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.

    8. 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.

    9. Fixed bug when checking manual hole-cutting inputs. If the number of surfaces was zero, it got stuck in an infinite loop

    10. 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

    1. 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.

    2. 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.

    3. 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.

    4. 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.

    5. 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.

    6. 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

    1. 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.

    2. 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).

    3. Set default value of $GLOBAL orphfix to .TRUE.

    4. 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.

    5. 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.

    6. 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.

    7. 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.

    8. 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.

    9. 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.
    1. Investigate pruning away fringe levels greater than 3 (or 2) after the level 2 interpolation.

    2. Investigate letting level 2 interpolation find stencils on boundary points, not just interior points.

    3. 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

    4. Projection issues: need to report number of points not projected due to the DISTANCE and ANGLE restriction.

    5. Routines for manual hole cuts are still written in Fortran 77. Does this slow it down?

    6. 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.

    7. Spew table showing how many stencils come from each zone in the peg_diag utility.

    8. 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.


    [Home] [NASA] Updated: Monday, 20-Dec-2004 14:09:43 PST
    WebWork: Stuart E. Rogers <rogers@nas.nasa.gov>
    NASA Responsible Official: Stuart Rogers
    [Help]