1. Introduction

1.1. Background

FUN3D was born in the late 1980s as a research code. The code’s original purpose was to study existing algorithms and to develop new algorithms for unstructured-grid fluid dynamic simulations spanning incompressible flow to transonic flow. The project has since grown into a suite of codes that cover not only analysis, but adjoint-based error estimation, mesh adaptation, and design optimization of fluid dynamic problems extending into the hypersonic regime. Meanwhile, algorithms developed in FUN3D are at the core of other CFD codes such as USM3D.

The solver has been applied to a number of complex large-scale problems by groups at NASA Langley, industry, and academia. (See the Examples section of this manual.) Internally, the software has been used to study airframe noise, space transportation vehicles, flow control devices using synthetic jets, the design of wind tunnel and flight experiments, and so forth. Boeing, Lockheed, Cessna, New Piper, and others have used the tools for applications such as high-lift, cruise performance, and studies of revolutionary concepts. The software has also been used for military applications, large-scale computer science research at national labs, as well as algorithmic studies performed at universities around the country. For example, researchers at Georgia Tech have been using FUN3D as their base for rotorcraft work.

In 1999, we began employing Agile Software Development practices, primarily those of Extreme Programming. We use Continuous Integration on a wide range of computer platforms. To catch integration errors, the suite of codes are repeatedly checked-out around the clock from our central repository, compiled, and several hundred regression and unit tests are run. Email, cell phone SMS, and Ambient Orbs provide instant notification of any errors. We practice pair-programming on a regular basis to raise our truck number and adhere to a coding standard (see the Appendix) while continuously looking for refactoring opportunities. We use a Wiki, email lists, retrospectives, and Scrum status meetings to facilitate communication, identify impediments, and foster team collaboration.

1.2. Capabilities

  • Analysis, Sensitivity Analysis, and Design Optimization
    • Hand-coded discrete adjoint for reverse mode differentiation
    • Automated complex variables for forward mode differentiation
  • Adjoint-based adaptation for outputs
  • Gradient-based adaptation
  • Domain decomposition with MPI communication for distributed computing
  • Node-based, finite volume discretization
  • 2D and 3D options
  • Thermodynamic models
    • Perfect gas (compressible and incompressible)
    • Thermochemical equilibrium, non-equilibrium
  • Multigrid with implicit time stepping where the linear system is solved using either
    • Point-implicit
    • Line-implicit
    • Newton-Krylov
  • Upwind flux functions
    • Roe flux-difference splitting
    • Van Leer flux-vector splitting
    • AUFS
    • HLLC
  • Turbulence models (all integrated to the wall)
    • Spalart Allmaras
    • k-omega/SST
  • Propulsion simulation (10.5)
    • Inlets (10.5)
    • Nozzles (10.5)
    • System performance calculation (10.5-beta)
  • Grid motion (time-varying translation/rotation)
  • Time-accurate options to third-order with error controllers
  • Modified linear elasticity solver for mesh morphing with hand-coded discrete adjoint and automated complex-variable modes for sensitivities
  • Standard F95 implementation readily portable to wide range of platforms and compilers
    • Hardware: SGI, Sun, Cray, HP, IBM, DEC, Pentium, Athlon, Opteron, Mac
    • Compilers: SGI, Sun, Compaq, Lahey-Fujitsu, Cray, Absoft, Intel, NAG, IBM, HP
  • Instant, live updates of code modifications made by the developers available via the FUN3D Website: http://fun3d.larc.nasa.gov/commits.html

1.3. Requirements

Our usual computing platform is Linux clusters, so this is the preferred environment for the software. A number of users prefer to work on Suns, SGIs, Mac OS X, Opterons, Crays, HPs, IBMs, or DEC Alphas; these platforms are supported as well. Users have also run on other architectures such as MS Windows based PC’s, however we don’t provide explicit support for these machines. The codes were originally geared towards vector processing, but have since been modified for cache-based platforms.

For FUN3D, you will need an F95 compiler. This code has gone through an extensive cleanup/overhaul over the past few years to lay a solid foundation for the extension to flows in thermochemical non-equilibrium, and is considerably easier to use and modify than ever before. New features include hooks for generalized boundary conditions, inclusion of incompressible physics formerly available only as a separate code, much more organized routines in an F95 module setting, and extensive use of F95 coding features such as derived types. The user can compile the code to run in either sequential mode or using MPI. The most improved aspect of FUN3D is the grid processing and partitioning stage, where users can now easily go directly from a number of popular grid formats to the solver.

For two-dimensional grid generation, we recommend the AFLR2 software written by Dave Marcum at Mississippi State University. Our automated scripts are geared towards this grid generator, but you may choose to use your own if you wish. Three-dimensional grid generation is much more involved, and is left entirely up to the user. Our most common sources of 3D grids are VGRID (NASA Langley) and SolidMesh/AFLR3 (Mississippi State). We also prefer the GridEx package (NASA Langley), which serves as an interface for a variety of CAD packages and grid generators.

We also offer unique design optimization and grid adaptation capabilities built around a discrete adjoint solver for the RANS equations. Before pursuing design optimization, you should be an experienced FUN3D user, and have some serious hardware available to run on. The adaptation capability is very far along, but still being matured. Get in touch with questions.

1.4. Release History

The following release notes comprise the latest changes that may be of interest to the general user. There are always a considerable number of additional changes taking place “under the hood.” However, until a new capability is judged mature enough for widespread use, such work is not explicitly noted here.

Version 11.0-x—Internal working version, not available yet

Major Enhancements

  • The use of party/pparty is no longer required as a preprocessing step. Linking to ParMetis library now required for parallel execution: solver loads raw grid formats directly and partitions internally in parallel. Eliminates [project]_part.i and [project]_flow.i files; restart information contained in a single file.
  • Continued improvements to computational performance. See these plots for tetrahedral performance relative to earlier releases, and these plots for mixed-element performance. Simulation is transonic flow using recent AIAA DPW tet/mixed grids consisting of roughly 5 million grid points. Run fully-dense on 32 dual-core nodes. Also see this plot for recent scaling study to 8,192 cores using various grids up to 105 million grid points (600 million elements).

Minor Enhancements

  • The default value for the UMUSCL coefficient is now 0.5 for all 3D node-centered computations on grids containing element types other than tetrahedra. Also removed the ability to specify this parameter from the command line. If user wants a different coefficient, it must now be changed in the source code. This value has been recommended practice for several years for such cases, so it was decided to make it the default.
  • Changed default coefficients associated with the BDF2opt temporal scheme. Traditional coefficients of 0.58 and 0.42 for the BDF3 and BDF2 contributions, respectively, may admit instabilities for long-running simulations. Default coefficients are now 0.48 and 0.52, shown both theoretically and numerically to yield stable solutions. See also AIAA Paper 2010-0122.
  • Added sanity/safety checks for periodic cases. Also added—periodic_tol command line option to control the tolerance for the periodic pair search.
  • All input data previously entered in the file namelist.input should now be placed in fun3d.nml. The existence of a namelist.input file will now cause FUN3D to halt execution, with a warning to the screen output.
  • Removed all co-linear discretization options
  • To ease use and reduce code maintenance, the “getgrad” executable is now obsolete. This tool used to perform the linearizations of the residuals and cost functions with respect to the grid for a subsequent mesh adjoint solve. These operations are now performed at the tail end of the flowfield adjoint solver when the ‘—getgrad’ command line option is invoked. The format of rubber.data has changed slightly to reflect this (see template in Adjoint subdirectory of distribution).

Bug fixes

  • Fixed minor memory problem in tetrahedral VGRID merging procedure
  • Fixed bug in specifying ‘—limit_near_walls_less’ command line option

Version 10.8-41173—July 2009

Major Enhancements

  • Initial release of time-dependent adjoint capability for static, rigidly-moving, and deforming grids. Initial demos shown at the 2009 AIAA CFD Conference (also included as Examples here on the website)
  • Modified mixed-element merging procedure for VGRID meshes to avoid merging rare pathological splayed-open cells in the baseline tetrahedral grid—cures robustness issues in the solver.
  • Disallowing simultaneous merging/lumping in the preprocessor. This was originally how things were set, but the restriction was removed in 10.7. Pathological grid topologies led to this restriction being re-introduced. Users may still lump the resulting mixed element grid as always.
  • Added option to trim merged mixed element prism stacks to same height across entire boundary layer grid, resulting in no pyramids present.
  • Computer science improvements in mixed element viscous flux jacobians speed routine up by 35%, yields about 20% decrease in overall runtime.
  • Users should see about a 10% reduction in runtime over 10.7 for tetrahedral solutions due to computer science-related improvements.
  • Streamlined the parallel preprocessor (pparty) to accommodate multicore environments, i.e., many processors with limited memory (as little as 1 GB per core). Tests have been successfully performed using up to 8,196 cores and this should extend to higher core counts. The preprocessing time and memory requirements for large grids (30M+ nodes / 180M+ elements) has been greatly reduced. However, grid mirroring and accounting for implicit lines are currently not implemented. Finally, the mixed-element path through pparty is operational but is undergoing further testing. Please report any issues.
  • Implemented overset flowfield adjoint solutions for steady flows.
  • Support for multipoint optimization using NPSOL

Minor Enhancements

  • Updated design optimization documentation and tutorial cases
  • Design driver can now be told the executable name for running MPI jobs, e.g., mpirun, mpiexec, etc.
  • Design driver now stores off history of surface grids for each body at each design iteration
  • Streamlined input for moving overset grids (&composite_overset_mesh namelist now has only one entry: the input XML file used for the static composite mesh generation)
  • Extended periodic boundary condition to handle periodicity in any of the three cartesian coordinate directions; solver determines periodicity direction by evaluating surface normals on the periodic boundaries

Bug fixes

  • Fixed bug for moving-grid cases requiring “snapping” of symmetry plane boundaries for strong symmetry enforcement
  • Fixed bug in Tecplot binary output
  • Fixed bug related to slicing through prisms using solution sampling surfaces

Version 10.7-37110—February 2009

  • Added support in party for FieldView FV-UNS version 3.0 files; also added support for single-precision unformatted files and corrected reading of multiple element types in unformatted FV-UNS files.
  • Expanded Tecplot output from the flow solver, largely eliminating the need for Party to do most Tecplot-related post processing.
  • Grid metric and distance function computations moved out of Party and into the flow solver, where they are now performed in parallel.
  • Added HRLES model of AIAA 2008-3854
  • Fixed memory problem when running RANS-based design optimization with explicit constraints
  • Added limited periodic BC for 2D grids extruded in spanwise direction
  • Allow for spatial transforms of bodies parameterized using MASSOUD for design optimization
  • Allow multiple bodies to employ the same set of design variables to maintain consistent shape during design optimization (i.e., blades of a rotor)
  • Made the mixed-element merging procedure for tetrahedral VGRID meshes more efficient and eliminated a subtle error that caused rare instances of doubly-bookkept surface faces at odd-shaped adjacent surface patches. Also improved the feedback loop for degenerate cells/metrics to enable iterative re-merging with higher quality elements. Removed restriction on concurrent boundary patch lumping and element merging.
  • Enabled linking to KSOPT, an optional third-party library for design optimization
  • Support for multipoint optimization using PORT, KSOPT
  • Fixed minor bug in adjoint solver associated with noninertial mode and Dacles-Mariani modification to Spalart model
  • Added command line option ‘—store_full_stencil’ to permit storage of complete linearization for adjoint residual computation rather than traditional nearest neighbor approach. Yields roughly a 5x speedup for adjoint solutions.

Version 10.6.0—August 2008

  • Added ‘—alternate_freestream’ command line option to initialize partially-quiescent cases such as rotors in hover in noninertial mode
  • Linearized noninertial mode in design tools (primarily facespeeds and Coriolis terms) – for example, allows design optimization of rotors in hover
  • Minor changes in format of rubber.data control file for design
  • Added and linearized rotorcraft figure of merit function (actually squared, to avoid a sqrt() of a negative lift in the linearizations) as an available cost function in design tools
  • Linearized Dacles-Mariani modification to Spalart model for use in design tools
  • Linearized farfield_pbck boundary condition in design tools
  • Enabled moment coefficients (and/or their pressure/viscous counterparts) to be used as cost functions for compressible flow in design tools
  • Bug fix for moving mesh GCL terms when more than one element type is present
  • Bug fix for nondimensional rotation rate for rotor cases
  • Enable build procedure to correctly accommodate NPSOL as an optional library

Version 10.5.0—May 2008

  • Primary solver input now specified through fun3d.nml namelist file – see section of manual devoted to flow solver input. Translator capability for legacy ginput.faces decks provided.
  • Format for partition files ([project]_part.i) has changed
  • Much improved propulsion-related boundary conditions for inlets/exhaust. See relevant section of manual, tutorials for information.
  • Improved computational efficiency (see tetrahedral speedup and mixed element speedup over last few releases)
  • Corrected minor problem with energy/pressure on the wall for moving grid/noninertial simulations
  • CGNS output support in party; two CGNS translator utility codes also added
  • The party preprocessor has been instrumented with OpenMP. To use in an OpenMP mode, party must be compiled with -openmp; otherwise party defaults to a single thread. Note, only the preprocessing path within party has been instrumented.
  • Overset capability now requires DiRTlib version 1_25 (or later) and SUGGAR version 2_41 or later
  • The command-line option—dci_on_the_fly now utilizes suggar library calls to a separate process run as part of the fun3d run script. A separate suggar executable is not needed. The new suggar library calls mean that the flow solver must be run with one more processor than there are part files. In addition, that processor must be the first processor in the machine file list, and that processor must have sufficient memory to fit the entire hole-cutting process.
  • Adjoint-based design components (which have been omitted from recent releases) are included in this release. Please do not attempt to undertake FUN3D design optimization unless you are extremely comfortable running the flow solver and you have some very powerful hardware at your disposal.

Version 10.4.1—October 2007

  • Fixed fatal bug in actuator disk capability
  • Autotools build process extended to handle IBM AIX systems
  • Since the appropriate fix has now been incorporated in the latest releases of VGRID, the VGRID “bcfix” subroutine is no longer performed on native VGRID meshes by party or pparty to correct numbering issues for viscous surfaces intersecting symmetry planes

Version 10.4—September 2007

  • New standardized installation procedure, based on the use of GNU autotools
  • Party now capable of merging legacy viscous tetrahedral VGRID meshes into prismatic elements in the boundary layer. Activated through the party command-line option—merge_tets. Requires VGRID .poin1 file.
  • Robust mixed-element solutions via command-line option—umuscl 0.5
  • Thin-layer formulation available for mixed-element solutions using command-line option—thin_layer
  • Depending on compiler/solver options and architecture, wallclock time reduction over v10.3.1 can be as high as 67%
  • Default relaxation scheme is now red-black with global consistency across processors.
  • New implementation for total temperature/total pressure boundary condition available for testing
  • Adjoints available for limited set of actuator disk options
  • Central difference plus scalar dissipation available for testing; use IHANE=5 in ginput.faces,—cd_jac to engage jacobians on LHS, and —scalar_diss_coeffs to specify kappa values
  • Incompressible implementation of specified normal velocity boundary condition now available
  • Party can now read point-matched multiblock structured Plot3D files and convert them to hexes, using neutral map files (.nmf) generated by V2K .
  • CGNS grid input support in party
  • Aeroelastic solutions using mode shapes now available with the command-line option—aeroelastic_internal – see “Time Accurate – Moving Geometry” section of the manual for more information
  • SUGGAR callable from within the flow solver to compute overset connectivity files “on the fly” for applications such as 6DOF
  • A min-mod limiter is available as IFLIM=3
  • Slices (a la the “box5/6” utility codes) can now be output from the flow solver via the command-line option—slice_freq – see “Time Accurate – Basics” section of the manual for more information
  • Multiple postprocessed output files of the Tecplot and/or Fieldview type can now be obtained in a single postprocessing run of party/pparty via the —multiple_output command line option; e.g. both surface and volume tecplot files can be had in the same postprocessing session
  • Solid wall boundaries can model translating and/or rotating boundaries i.e., ground vehicle with moving ground plane and rotating tires. See FUN3D_90/project_name.initbc for an example.
  • Party and PParty default to a more efficient partitioning approach resulting in better load balancing of nodes, cells, and edges.
  • Simple runtime mesh adaptation based on node movement available for testing.
  • Gradient-based mesh adaptation using refine library available for testing. refine is available via the same channels as FUN3D, but is not included with FUN3D.

Version 10.3.1—May 2006

  • Fixed a bug in parallel partitioning that affected SST turbulence model behavior.

Version 10.3.0—May 2006

  • Fixed a bug in repartitioning time-accurate data with party
  • Added static grid transform (translation/rotation) to be performed at the start of a flow solve (leaves part file unchanged). Triggered via the command-line option—grid_transform and requires namelist &grid_transform data to specify the desired transform
  • Added multiple-mirroring capability to party. For example, a 1/4 grid might be mirrored first in z, then in y to create a full, 360 degree grid, via the command-line options—mirror_z—mirror_y
  • Changed mesh/body motion transforms from incremental (from last time step) to transforms from t=0 to unify forced motion, SUGGAR and 6DOF; the input file grid_motion.schedule, previously used to set grid motion parameters, is deprecated – moving_body.input (a namelist file) now serves the same function (and more).

Version 10.2.0—March 2006

  • Corrected long-standing bug in Menter’s SST model. Significantly improves performance of this option (available for INCOMP=0 and 1)
  • Added the ability to optionally initialize “boxes” of the domain to different values than normally set by values in ginput.faces. Can be useful for flowfields with widely varying conditions, such as an external flowfield with a jet nozzle modeled within the moldline of the vehicle. See flow solver input deck section for details.
  • To aid convergence for supersonic flows or other flowfields using a flux limiter, added the ability to “freeze” the flux limiter after a specified number of timesteps. See documentation accompanying IFLIM in the input deck section.
  • Symmetric Gauss-Seidel relaxation now available through the command line option --sgs.
  • Added the mirroring capability into pparty. By invoking pparty with any mirroring command line option (—mirror_x,—mirror_y, or—mirror_z), a (FAST) mirrored grid will be created. That grid can be subsequently partitioned.
  • The repartitioning capability in pparty has been extended to enable users to repartition adjoint files exclusively of other files.

Version 10.1.0—November 2005

  • Added capability to process boundary condition -4000, the laminar patches for turbulent transition flows, to pparty.
  • Slight modification to nonlinear update formulation. New approach lets solution (pressure/density/energy/turbulence) get really close to zero, but never quite get there. Seems to help robustness in some cases that are “on the brink”
  • Percentage value for clipping nonlinear updates during large transients now available via command line with “—meanflow_talp 0.15” (would set value to 15% for mean-flow eqns) and/or “—turb_talp 0.10” (would set value to 10% for turbulence eqns). Note 15% and 10%, respectively, were the hardwired values for prior releases.

Version 10.0.2—July 2005

  • Added capability to extract pressure signatures along rays in the x-direction. User supplies yz-coordinate pairs (as many as desired) via sonic_boom.input file. Pressures are extracted for plotting at every grid face the ray(s) intersect.
  • Added pressure integral on user-defined integration cylinder cutting through the domain as an objective function. See picture.
  • Fixed an error in the initialization of rotor sources for LoadType=1 and LoadType=2. This bug would cause the resultant disk loading to be garbage. This only applies to use of the --rotor command line option.
  • Switched the rotor formulation to be based on rotor tip speed. This prevents the division by zero errors associated with hover cases (XMACH = 0.0).

Version 10.0.1—February 2005

  • Fixed a fatal compilation error for some versions of the Intel compiler
  • Fixed an error in the rotor module that would cause the solver to crash for all loading models except the blade element model.
  • Three components of vorticity, as well as its magnitude, are now available as standard plotting variables in the Tecplot volume file option of party

Version 10.0—February 2005

Due to a new Langley policy, FUN3D has jumped from Version 3.x to Version 10.0 with this release.

  • Incorporation of rotor source terms to model time-averaged behavior of a rotor or propeller. Four loading models are available: uniform, linear variation along the radius, blade element, and a user specified distribution.
  • Revamped the implementation of noninertial (rotating) reference frame; should be viewed as preliminary, but users should be aware that it is different from previous releases. The fundamental difference is that solutions are now obtained for the absolute velocities as seen by an observer in the noninertial frame, rather than for the relative velocities as seen by an observer in the noninertial frame.
  • In concert with the revamped noninertial frame implementation, party now accepts the same command line options for nonertial reference frame solutions as the flow solver. If party is run with these options, it will query the user as to whether the solution file should be output in terms of absolute velocities or relative velocities; if relative velocities are requested, party uses the command line data to make the conversion.
  • Wall temperature in viscous flows can now be input via the command line option --twall temp where temp is the (real) value of the nondimensional wall temperature
  • Initial implementation of a “tunnel inflow” boundary condition in which total pressure, total temperature, and 2 flow angles are specified at a subsonic inflow boundary. The new boundary condition number is 7000, “totalp_totalt”. The values needed for this BC are input via the command line option --tunnel_inflow PT TT aa bb where PT, TT, aa, bb are real values of P_total/P_infty, T_total/T_infty, alpha (degrees), and beta (degrees), respectively at inflow.
  • Added time-accurate capability for incompressible flows – should be viewed as preliminary
  • Added third-order backward differencing in time, “bdf3”, (itime=3), and “bdf2_opt”, (itime=-3), a blend of second and third order schemes. The bdf3 is not fully A-stable, but bdf2_opt is, so it is a good compromise scheme.
  • Added estimate of temporal error for unsteady flows, which may be used to regulate subiteration convergence via the command line option --temporal_err_control temporal_err_floor where temporal_err_floor is the factor by which the subiteration residual should drop below the temporal error estimate before the subiteration loop is exited. A recommended value is temporal_err_floor = 0.1
  • Added “UMUSCL” scheme for inviscid fluxes analogous to “kappa family” of schemes for structured meshes, implemented via the command line --umuscl kappa where kappa is the upwinding parameter: 0.0 gives the baseline FUN3D scheme, 1.0 is central differencing (don’t use 1.0), and 0.5 leads to a third-order inviscid flux on uniform grids in one dimension.
  • Hypersonic path now evaluates heating in the flow solver alongside usual forces and moments, instead of just in party
  • In regards to viscous VGRID meshes having inconsistent connectivity information between the .cogsg and .bc files on symmetry planes: added a party command line option --bcfix_skip_viscous_patches to skip the “fixing” of the viscous patches, as sometimes the extraction of faces on the viscous boundaries will fail to find all the faces, and viscous patches typically do not have advancing layers that need to be “fixed”. Also added a comment when the default extraction fails to give the user a hint that they should try this command line option.

Version 3.3.1—August 2004

  • Bug fixes for the adjoint error estimation and correction --radembed command line option.
  • Interface compatible with refine library version 1.2.1.

Version 3.3—July 2004

  • First release of suite of sensitivity analysis and optimization components: Adjoint solver, Sensitivity analysis, Mesh movement/Mesh adjoint solver, Optimization driver. Requires lots of processors and substantial hands-on experience with the baseline FUN3D flow solver.
  • Massive overhaul to the user manual section of the website
  • Changed ginput.faces input file format (variables ITIME, DT, DTAU, and CONST_DT). See example in FUN3D_90/ginput.faces.
  • Added [project]_subhist.tec output file for time-accurate cases. This Tecplot file contains the subiteration convergence history for the RMS residuals.
  • Added the --partition_lines option in parallel party, which partitions the grid while leaving the implicit lines intact.
  • First release of moving grid capability. At the present time, only a limited number of movement options are available: 1) translation with constant speed, 2) translation with speed sinusoidally varying in time, 3) rotation with constant angular speed, and 4) rotation with angular speed sinusoidally varying in time. At the present time all grid points move with specified function of time, i.e the mesh moves as a rigid body.

Version 3.2.2—April 2004

  • Added blocksize argument to open statements to improve I/O performance with Intel 7.0 compiler. (Must compile with – DINTEL_COMPILER to invoke this argument.)
  • Eliminated duplicated Jacobian elements on off-diagonals for non-simply connected elements—did not affect results, only additional memory and CPU cost
  • Revised and streamlined USE statements to resolve Internal Compiler errors for Intel7.0, Intel7.1, and Intel8.0.
  • Added a routine to synchronize the status of file deletions for distributed files system (i.e., NFS) with program execution.
  • Added parallel repartitioning to the preprocessor (pparty). This allows existing partitions and solutions (including time-accurate) to be repartitioned in parallel.
  • To address I/O issue of writing parallel partition files, added a command line option (--pparty_interleaf) which allows the user to write out selected groups of partition files concurrently. By default, each processor will write it’s partition out concurrently. An interleaf value of 2, will allow 2 processors at a time to write out their partition concurrently. A value of 1, will allow each processor to write out it’s partition alone.
  • Added an option in sequential party to dump out Tecplot data to interface with Dick Campbell’s CDISC tool.

Version 3.2.1—March 2004

  • Added a command line option --lines_unlumped_bcs which uses an alternate line construction for unlumped viscous boundaries. Also added an output file projectname_badlines.tec which dumps out the lines that may be “bad” (under 15 nodes and over 40 nodes long). The original line construction technique may have problems at concave corners if the corners lie along unlumped viscous patch boundaries. The command line option must be used for both party and the flow solver.
  • Added a command line option --turb_transition which will allow for transition to turbulent. The laminar surfaces are marked by boundary groups—use – 4000 or – 4 boundary type. The turbulent production terms are turned off near these boundaries. The laminar nodes in the volume are marked by setting the iflagslen to a negative number. A laminar node is specified if the nearest surface node is on a laminar boundary. The command line is required for the flow solver only. The mesh must be pre-processed with the – 4000 or – 4 boundary flags. This is not functional for the incomp=2 path and works only for SA perfect gas.
  • Added command line option --fviflagslen to output iflagslen (iflagslen<0 for laminar regions) Fieldview file when partitioning (Party Only)
  • Added command line option --cl_const for the flow solver to drive the solution to a constant cl value which is the argument to the command line option. A new tecplot file projectname_alpha.tec will be generated for this type of run. Note this file does not keep track of prior history. If you restart with a cl_const the initial alpha will be read from the restart file. This is not functional for the incomp=2 path.
  • Added laminar, S-A terms on mixed element grids, but not mature yet. 2D ready for experimentation, 3D not robust yet
  • party_metis and party_nometis have been merged into a single executable party. The inclusion of Metis is controlled by the setting of the METISLIBS variable in Makefile.env. Leave blank for party without Metis capability.
  • Parallel version of party, pparty, now available. Useful for partitioning large cases on distributed clusters. (Very memory-conscious, was a showstopper for party.) Requires PARMETISLIBS to be set in Makefile.env. Requires MPI. Not all functionalities of party are in yet—no line-implicit partitioning, multigrid partitioning not complete yet, mixed elements not fully ready, no repartitioning available yet. Suggest using command line inputs, rather than menus. No [project].msh file is created. Run party —pooper_nomsh@ to view results on global grid.
  • Multigrid algorithm now in flow solver—requires explicit family of grids. RANS cases not robust yet.
  • Party can now handle multiple grids in a family through the use of --ngrid [n]. This is for multigrid solutions. The interpolation data will be generated automatically between each successive pair of grids.
  • Can now dump out S-A dependent variable (nu-wiggle) to Fieldview and Tecplot files
  • Added off-diagonal contributions to laminar terms on the boundaries—optional through the command line option --lam_bc_offds. Useful for low-Re applications.
  • General relaxation schedule implemented—control over sweeps in different parts of domain, ordering, etc. Uses additional input deck—ginput.faces is used if new file is not present.
  • Newton-Krylov capability added; don’t use it
  • Initial work done on user-specified profiles on BC’s—not ready for general use yet
  • Slight changes to time-accurate stepping
  • Roe Jacobians can now be used by --roe_jac
  • New fluxes/Jacobians implemented: AUFS (IHANE=4), HLLC (IHANE=3). Use --aufs_jac, --hllc_jac for the corresponding Jacobians (instead of default van Leer LHS).

Version 3.2.0—March 2003

  • Removed for perfect gas path BC index 3010, a strong inviscid boundary condition (it doesn’t work for a general case were boundaries are lumped. Also gives suspect results for sharp t.e.)
  • Removed the strong implementation of the viscous porous boundary but left the subroutines in place. Need to go back and re-visit the implementation of the strong b.c.
  • Fixed a bug in the line_solve.f90 module. Added to the dimension max_nodes_in_line so that the start and stop nodes wouldn’t cause a memory overrun in cases where the line is of maximum number of nodes.
  • Mixed-element (hex, prism, pyramid, tet) inviscid solution capability for compressible and incompressible flows.
  • Strongly coupled SA turbulence model for compressible flows.
  • Automatic generation of complex version of the flow solver. (Ruby script)
  • Several new grid input options in Party (Fieldview, NSU3D and AFLR3) that support mixed-element grids.

Version 3.1.5—October 2002

  • Party now handles mixed elements throughout; not meant for general use yet
  • Prismatic extrusion of FUN2D grids in party
  • Weighted partitioning for viscous grids with implicit lines
  • Implemented implicit line solves for compressible viscous flows
  • Build process overhauled to simplify addition/removal of dependencies
  • Pre-processor directives are used for conditional compiling between sequential/parallel, metis/nometis, and compatibility with NAG compiler
  • Vectorization colors have been removed

Version 3.1.4—July 2002

  • Compilation now requires installation of Ruby scripting language
  • ./Configure must be run in the top level directory now to generate Makefile.env for compilation
  • Format of input deck changed—see FUN3D_90/ginput.faces for example
  • Format of restart files changed to hold more data
  • Post-processing of adjoint solution (party)
  • Generation of embedded grid and solution using party
  • Re-factored the Jacobian storage to be compressed row instead of edge based
  • Added command line options to all codes; options can be seen with --help
  • Added additional skin friction routine based on residual balance
  • Continued internal refactoring of party for mixed elements (not ready yet)
  • Improvements continuing for generic gas path algorithms (not ready yet)
  • Added 2-eqn SST turbulence model (not fully tested yet)
  • Optional modification of source term for Spalart model as suggested by Jack Edwards (NC State)
  • Allow separate time step for turbulence and flow equations
  • MPI modules now constructed using a code generator with templates
  • Entire compressible path explicitly declared as double-precision kind (no need for - r8)
  • Party capable of reading Fieldview-format files (under evaluation)
  • Continuous automatic code documentation generation with Ruby RDoc package
  • Added new BC index 4050, a weak viscous boundary condition
  • Added new BC index 3010, a strong inviscid boundary condition

Version 3.1.3—March 2002

  • Fixed non-dimensionalization bug in incompressible moment computation
  • Moved project name into grid derived type
  • Fixed compiler warnings on DEC Alpha/Fort compiler

Version 3.1.2—February 2002

  • Instituted a libs directory that stores all of the common modules that many of the codes share
  • Moved the viscous strong boundary enforcement after all the boundary fluxes have been added to the residual. This is to avoid any conflicts at the boundary interfaces.
  • Added second-order time accuracy. Laminar has been checked out (see picture ), turbulent being evaluated
  • Added option for Detached Eddy Simulation (still to be tested)
  • Added output routine to party to interface with ParMGridGen . The call is commented out, but is there if/when we need it in the future.
  • Added three new viscous boundary conditions:
    • BC 4010—Constant normal mass flux is set on a viscous boundary. (The value of mass flux is set in the bc_types module and is based on non-dimensional density and velocity. These values will eventually be read into the solver via an auxiliary boundary condition input deck.)
    • BC 4020—Constant normal velocity is set on a viscous boundary. (The value of normal velocity is set in the bc_types module and is based on non-dimensional velocity. These values will eventually be read into the solver via an auxiliary boundary condition input deck.)
    • BC 4030—Constant velocity is set on a viscous boundary. (The value of each Cartesian velocity is set in the bc_types module and is based on non-dimensional velocity. These values will eventually be read into the solver via an auxiliary boundary condition input deck.)

      Note these are strong boundary conditions. The surface velocities are initialized at the beginning of the calculation and not updated. For the normal mass flux and velocity conditions the initial normal direction is based on the boundary point normals calculated in the pre-processor.

  • Changed the output format for tecplot files to fifteen digits so that the viscous layers on tightly packed grids don’t get scrambled.
  • Added projected yplus to the tecplot solution output for viscous cases.
  • Added option to dump out entire volume grid in ASCII Tecplot format.
  • Corrected bugs in the rhs and LHS contributions for the compressible viscous boundary fluxes which are added on the inviscid,symmetry and farfield boundaries.
  • Corrected bugs in the LHS contributions for the incompressible viscous boundary fluxes which are added on the inviscid,symmetry and farfield boundaries.

Version 3.1—October 2001

  • First release of reacting gas chemistry capabilities. Note that this option (INCOMP>1) is currently in its very preliminary development stages and should not be executed by the everyday user. This development is being done under the HEFSS element of the FAAST program.
  • Reference temperature was still hardwired at 460 in subroutine edgejp. Now uses value that comes in through info_module.
  • Added new farfield boundary condition for extrapolation for both compressible and incompressible flow. The grid BC index is 2; the corresponding FUN3D BC index is 5005.
  • Added new farfield boundary condition for specifying back pressure. This value is currently set to freestream, but will be user-defined in the near future. This BC is valid only for compressible flow. The grid BC index is 5010; the corresponding FUN3D BC index is also 5010.
  • Explicitly defined boundary normals in party to be of kind my_r8, so the code will successfully do double-precision file I/O on compilers which don’t have a – r8 flag.
  • The dummy “time” variable in the restart file headers is now written out explicitly as kind my_r8. This is also for double-precision file I/O under compilers not having a – r8 option.
  • Added FELISA grids as an input option. The user supplies formatted .fro (boundary mesh) and .bco (boundary conditions) files, as well as a formatted .gri file (volume mesh). The native FELISA boundary types can either be mapped into the FUN3D format, or the FUN3D boundary indices can be entered directly in the .bco file.
  • Added a fix so that FUN3D-style BC indices can be used in the .fastbc or .mapbc files. If legacy boundary indices (<100) are used, they will be converted as usual to FUN3D format.
  • Renumbered options in party main menu for future expansion
  • By setting the number of existing partitions to be a negative value in party, the user can reconstruct solution files based on the grid coordinates contained in the [project]_part files, rather than the .msh file. This is intended to be used when a grid is moved, and only solution files are needed—note that the metrics are not updated, so this option should NOT be used when repartitioning a grid. The everyday user should not require this option.
  • Added a party output option to write out Tecplot surface files for exchange with MASSOUD. The everyday user should not require this option.
  • Modified the skin friction output in the Tecplot output to be based on the sign of the u velocity. This is so that in a separated region, we actually see a “negative” skin friction.
  • Made minor bug fixes in boundary Jacobians for BC types 6010,6011,6012 (the strong symmetry conditions).
  • Added distance function arrays to end of current distance function record in [project]_part files. These are already in .msh file. This was done to speed up computation of derivatives of the distance function for design. The everyday user should not care about this.
  • No longer write out a surface.dat file when partitioning; we now write out [project]_surf.dat from initial grid processing. This is for design purposes; the everyday user should not care about this.
  • The input deck variables are now broadcasted to all processors as they are being read in, rather than all at once at the end of the reading.
  • The .forces file is now written out at every ITERWRT iterations along with the [project]_hist.tec and restart files.
  • Fixed a bug in the Mach number computation in Tecplot output
  • Fixed a couple of Intel F90 compiler warnings

Version 3.0.2—July 2001

  • Fixed several small warnings from the Intel compiler—couple of tabs, 1h format descriptors, unused format statements.
  • Removed extraneous return statements.
  • Added explicit dimensions to thermo_module; was still using assumed-size arrays.
  • When the explicit symmetry plane BC type was added in v3.0.1, the viscous fluxes were being closed off on symmetry plane boundaries, but the “inviscid” portion of the if statement at the top of this loop was overwritten with “symmetry”, rather than “symmetry” simply being added to the end of the if statement in ADDITION to the “inviscid”. This has now been fixed so that the viscous fluxes on both inviscid and symmetry BC types are closed off appropriately.
  • The viscous flux Jacobians have also been modified on the boundaries for inviscid and symmetry BC types. Neither of these were being rigorously closed off before (since the LHS is just an approximation, we were able to get away with it).
  • Symmetry plane BC types have been added for x- and z-planes. These are now BC types 6001 and 6002, respectively.
  • Added strong enforcement of zero crossflow velocities on symmetry planes. These are BC types 6010, 6011, and 6012. They are for y-, x-, and z-symmetry planes, respectively.
  • The title string at the head of the input deck is now used as the zone title for the Tecplot convergence history output.

Version 3.0.1—June 2001

  • Corrected bug in non-dimensionalization of moments. Individual pressure and viscous components were OK; totals were not.
  • Corrected bug in preprocessor. Inviscid VGRID meshes were being sent through a routine intended solely for viscous grids.
  • Added BC Type 6000 for symmetry planes. They are currently treated exactly the same way as Type 3000 (inviscid), but are not included in force/moment computations.

Version 3.0.0—May 2001

  • Constructed to provide an initial foundation for the HEFSS project
  • Full conversion to Fortran 90 and MPI
  • Generalization of boundary condition specification through derived types
  • Much improved usability for first-time users, especially grid pre/post-processing and domain decomposition
  • Explicit version control using CVS

Version 2.0—July 1999

  • Parallelization using SGI shared-memory directives and domain decomposition
  • Design capability developed through the use of discrete adjoints (reverse mode) and complex variables (forward mode)

Version 1.0—June 1993

  • Solves the RANS equations on tetrahedral meshes on a single processor using a node-based scheme. Core numerics performed in Fortran 77, using a C front end for dynamic memory allocation.

Version 0.1—1989

  • Solves the Euler equations on tetrahedral meshes on a single processor using a cell-centered upwind finite-volume scheme and backward-Euler implicit time integration.
  • Implicit scheme eventually incorporated into USM3D.

1.5. Request FUN3D

FUN3D is export restricted and can only be given to a “US Person”. The export restriction is in place because: 1) the code is developed by the US Government at US taxpayer expense, 2) the code can be applied to a wide range of fluid dynamic problems, and 3) a number of code features represent leading-edge technology.

A “US person” is a citizen of United States, a lawful permanent resident alien of the US, or someone in the US as a protected political asylee or under amnesty. The word “person” includes US organizations and entities, such as companies or universities – see 22 CFR §120.15 for the full legal definition.

There are currently two usage agreements available for FUN3D:

  1. A user
  2. A developer/user

The latter means that you become a virtual member of the FUN3D Software Development Team and have direct access to make changes to the suite of codes via the CVS system. To qualify as a developer, your proposed contribution has to be deemed beneficial to NASA as determined by the FUN3D Development Team and you must work congruently with our software development process (an Extreme Programming subset). Specifically, your code contributions should conform to our coding standards and you must be willing to monitor FUN3D’s continuous build email list and promptly repair any integration errors introduced by your contributions.

Currently (Jan’05), neither type of agreement will provide access to the hypersonic modules of the code, but we are working to relieve this restriction.

To request FUN3D, please fill out the form below or simply send an email containing the information requested below.

Type of request:

  • User
  • Developer

“US person” to put on agreement form: (e.g., an institution or individual)

Point of contact: (if “US Person” is not an individual)

Point of contact email address:

Phone number, extension:

FAX number: (if available)

Address:

Proposed application:

How did you discover FUN3D?

...and to verify you are a human: