---------------------------------
Release Notes r364
Version 4.15.a
Input file changes:
All changes are backward compatible. Therefore all old input files should work
as previously and deliver similar results. Results will not be exactly identical
to previous versions due to default settings. However previous results can be
exactly recovered by adjusting default settings or using optional parameters.
Extensions to input file:
MMESH is now disabled. Number of lines in mesh sequencing paragraph
(i.e. under NCYC... NPRNT etc) is now autodetected. Therefore MMESH
can be set = 1 and ignored.
------------------------------------------------------------------------------------------------------
The sequence under NCYC.. NPRNT... is now augmented to include OPTIONALLY two extra variables.
The headings identify these as FVIS2 and FSOLVER_TYPE.
FVIS2 sets the vis2 artificial dissipation on each level.
The default value is set 4 lines lower, under the VIS2 heading in the input file.
If the FVIS2 entries are omitted or set less than or equal to 0.0 (FVIS2 <= 0.0),
the default value is used. Otherwise, the FIVS2 value is used for that grid level.
This may be useful to preconverge the solution with a different VIS2 value prior to
using a different final value.
------------------------------------------------------------------------------------------------------
FSOLVER_TYPE can also be used to specify the solver type on each grid level or sequence.
If this entry is ommitted, the default solver type is used.
Also, if this entry is < 0, the default solver type is also used.
The default solver is either the non-linear single grid/multigrid (FAS) algorithm
or one of the linear solvers as specified in the OPTIONAL LINEAR SOLVER lines further
down in the input file (see below).
If FSOLVER_TYPE is not negative, then it is used to set the solver type for that grid level or sequence.
The values are:
FSOLVER_TYPE = 0.0 --> Nonlinear single or multigrid algorithm
FSOLVER_TYPE = 1.0 --> Linear solver type 1
FSOLVER_TYPE = 2.0 --> Linear solver type 2
FSOLVER_TYPE = 3.0 --> Linear solver type 3
Note that if a linear solver is specified by any FSOLVER_TYPE entry, the linear solver parameters
must be defined in the OPTIONAL LINEAR SOLVER line entries further down in the input file.
The default linear solver type is specified in these lines by the entry ISOLVE_LINEAR.
Only one OPTIONAL LINEAR SOLVER can be specified, but the ISOLVE_LINEAR entry must be >= to the largest
value specified under all FSOLVER_TYPE entries.
The FSOLVER_TYPE parameter is useful for combining different solver types within the same run.
For example, the nonlinear multigrid solver typically converges quickly initially but may stall after
a few orders of residual reduction. The linear solver, particularly TYPE 3 (Newton-Krylov GMRES) usually
provides robust convergence to machine zero, but is slow to converge initially. Thus a useful strategy is
to partially converge the coarse levels and the fine level (as first order, and perhaps also second order)
using the nonlinear multigrid algorithm, followed by application of the linear solver on the last grid sequence.
------------------------------------------------------------------------------------------------------
LIMITING BASED ON VERTEX DEGREE:
The artificial dissipation scheme used in NSU3D (IFLUX=0) is well known to suffer on grids with
high vertex degree. Some grids with over 200 edges touching the same grid point have been encountered,
particularly with newer grid generators. This does not affect schemes that use the Roe flux with reconstruction,
but cause problems with the artificial dissipation scheme.
In order to alleviate this issue, a limiter based on vertex degree has been implemented.
The maximum vertex degree in the mesh is computed and listed in the NSU3D output file at the start
before calculations begin. There are two optional parameters which control the limiting:
NV_DEGREE_MAX
NPASS_VERTEX_LIMIT
Current defaults are: NV_DEGREE_MAX = 40 and NPASS_VERTEX_LIMIT = 3
NV_DEGREE_MAX lists the maximum vertex degree above which limiting may take place.
Note that in a tetrahedral mesh, the average degree is 14 (6 for a hexahedral mesh, and in between for prisms).
Under the current defaults, all vertices that have a degree > 40 will be flagged for limiting.
Then, NPASS_VERTEX_LIMIT = 3 passes are performed to extend this limiting to 3 levels of neighbors.
The total number of limited points (at each pass and final) is listed in the output file.
These points are limited to first order in the discretization, using the specified VIS0 value to apply
first-order dissipation at these points. Alternatively, a different first-order dissipation value
can be used at these points by specifying the optional parameter FLIM_VIS0.
Note that FLIM_VIS0 is used for both the VERTEX degree limiting and the REGION limiting procedure (see below).
Note that these settings will change the results from previously run cases if any vertices in the mesh
surpass the NV_DEGREE_MAX value (default=40). This can be avoided by setting a large NV_DEGREE_MAX value
as an optional parameter.
An alternate approach is to set:
NPASS_VERTEX_LIMIT = -1
In this case, the code will stop execution if a vertex with a value large than NV_DEGREE_MAX is encountered
in the mesh. The user can then decide what the best approach should be to re-issue the calculation:
raise NV_DEGREE_MAX in the hopes of running without limiting, or apply a specific amount of limiting
as determined by the parameters NV_DEGREE_MAX and NPASS_VERTEX_LIMIT.
------------------------------------------------------------------------------------------------------
LIMITING BASED ON REGIONS:
In certain cases, specific isolated features can cause solver failure, such as sharp corners or
high Mach number flow features in poorly resolved areas. A region based limiting facility is also
provided to enable limiting the solver to 1st order in specified regions.
This is enabled using the optional parameter NLIM_REGION.
NLIM_REGION = 0 is the default. Using NLIM_REGION > 0 instructs the code to
read in a file named: limit_region.nsu3d (file name set in init_io.f)
In this file, NLIM_REGION regions are specified. There are 3 possible regions:
BOX, SPHERE, CYLINDER (CYLINDER is currently not implemented).
A sample limit_region.nsu3d file is given here:
------------------------------------
TYPE:BOX
1000. 1200.
1150. 1250.
-20. 20.
------------------------------------
TYPE:SPHERE
1000. 1100. 20.
10.1
------------------------------------
TYPE:CYLINDER <--NOT IMPLEMENTED
1000. 1100. 20.
1000. 100. 20.
10.
------------------------------------
The BOX region lists
xmin-xmax
ymin-ymax
zmin-zmax
that define a rectangular region where the discretization is set to 1st order.
The SPHERE region lists:
xcent, ycent, zcent
radius
that defines a sphere region where the discretization is set to 1st order.
The CYLINDER regions lists:
xend1, yend1, zend1
xend2, yend2, zend2
radius
that defines a cylindrical region where the discretization is set to 1st order.
The value of first order dissipation used in these regions
is by default the VIS0 value set in the input file.
Alternatively, a different first-order dissipation value
can be used at these points by specifying the optional parameter FLIM_VIS0.
Note that FLIM_VIS0 is used for both the REGION limiting and the VERTEX degree limiting procedure.
------------------------------------------------------------------------------------------------------
OPTIONAL LINEAR SOLVER:
This consists of multiple lines that optionally are specified before the MESH DATA FILE line
(separated by delimitation lines "---").
There are 3 types of linear solvers available, and these are specified by the ISOLVE_LINEAR parameter.
ISOLVE_LINEAR = 1 --> Linear solver applied to first-order system with no GMRES and prescribed CFL ramping.
ISOLVE_LINEAR = 2 --> Linear solver applied to first-order system with GMRES and automated line search CFL/updates.
ISOLVE_LINEAR = 3 --> Exact Newton Krylov solver with GMRES and automated line search CFL/updates.
Generally speaking, solver robustness increases with increasing ISOLVE_LINEAR values.
On the other hand, efficiency may decrease for the more robust solvers (but not always,
as this depends significantly on the parameters specified for the solvers such as linear tolerance etc.)
In general the linear solver consists of the specified single or multigrid iterations
under NCYC_LINEAR_MG, NCYC_LINEAR_FG and NCYC_LINEAR_CG.
For ISOLVE_LINEAR = 1, these are used directly as the linear solver, whereas for ISOLVE_LINEAR=2,3
these are used as a preconditioner applied to each Krylov vector in GMRES.
NCYC_LINEAR_MG: Number of cycles (single or multigrid) used in the linear solver or preconditioner.
NCYC_LINEAR_FG: Number of cycles used on the fine grid at each of the NCYC_LINEAR_MG cycles.
NCYC_LINEAR_CG: Number of cycles used on the coarse grid at each of the NCYC_LINEAR_MG cycles.
These are block or line Jacobi cycles. (In the future, block or line Gauss-Seidel cycles will be implemented.)
Often it is useful to also monitor the convergence of the linear system at each non-linear iteration.
For the GMRES solvers (ISOLVE_LINEAR=2,3) the linear system residual at each GMRES iteration (or Krylov vector)
is output to the screen. For ISOLVE_LINEAR=1, no other information is output.
By setting NCYC_LINEAR_FG < 0, (i.e. NCYC_LINEAR_FG=-4 instead of 4), the residual at each fine grid
iteration is output to the screen. This can be used with ISOLVE_LINEAR=1,2,3.
However it should probably be used always with ISOLVE_LINEAR=1.
For ISOLVE_LINEAR=2,3 this will add information about the convergence of the preconditioner, which can be useful
when GMRES is slow to converge, although for most cases that run well, this clutters the output.
Note that NCYC_LINEAR_CG < 0 can also be used to output residual values on the coarse grid levels,
but this is not often useful.
For most linear multigrid runs, good values have been found to be:
NCYC_LINEAR_MG NCYC_LINEAR_FG NCYC_LINEAR_CG
3. to 10. 4. 4.to 10.
For cases where multigrid is not robust (bad quality coarse grids) the linear solver can still be quite
effective on a single grid. Typical settings in this case are:
NCYC_LINEAR_MG NCYC_LINEAR_FG NCYC_LINEAR_CG
1. 30. ?.
NCYC_LINEAR_CG value is not relevant, but make sure to set NMESH=1 (above in input file) for these cases.
For ISOLVE_LINEAR=1, no additional lines are needed in the OPTIONAL LINEAR SOLVER region.
In this case the linear solver will perform the prescribed number of iterations at each nonlinear cycle.
Alternatively, one can set a residual tolerance for the linear solver. In this case, the linear solver will
either perform the specified number of iterations, or will exit early if the prescribed linear residual reduction
has been achieved. This is set through the optional parameter PC_TOL. For example, PC_TOL = 0.1 will make the
linear solver exit after 1 order of magnitude decrease in the linear residual. At the start of the calculation,
when CFL is small, often this tolerance is achieved before the prescribed number of iterations and can be used
to improve the overall efficiency of the ISOLVE_LINEAR=1 solver.
For ISOLVE_LINEAR=2,3 the additional parameters:
NKRY GMRESTART LINEAR TOL
100. 1. 1.e-02
should be specified. Note that if these are not specified, the default values (shown above) will be used.
(Also, these can be specified even for ISOLVE_LINEAR=1, but will be ignored.)
NKRY: --> Maximum number of Krylov vectors used in GMRES
GMRESTART: --> Maxium number of restarts for GMRES (currently must be = 1)
LINEAR_TOL: --> Linear tolerance required for linear solver (GMRES) exit.
The total maximum number of GMRES iterations is NKRY * GMRESTART.
Currently GMRES restarts are not implemented so GMRESTART=1 is REQUIRED.
Therefore the effective maximum number of GMRES iterations is NKRY.
Note that NKRY has an important effect on overall memory required by the solver.
This is because GMRES requires each Krylov vector to be stored in memory.
So the solver allocates NKRY solution vectors (5,6, or 7 variables per grid point).
In general NKRY values larger than 500 are not recommended.
The linear solver for (ISOLVE_LINEAR=2,3) exits either when the LINEAR_TOL
(reduction in linear residual) has been reached, or when the maximum number
of Krylov vectors (NKRY) has been reached (which ever occurs first).
For ISOLVE_LINEAR=2, the linear system being solved is only a first order system and generally converges well.
Therefore, LINEAR_TOL=1.E-02 may be more than required, and values such as LINEAR_TOL=1.E-01 (or even higher)
can be used to improve solver efficiency with little effect on overall nonlinear convergence.
One will notice that even if the linear system is well solved at each iteration, the nonlinear residual
will decrease by no more than a factor of 0.9 or less at each update, so many outer nonlinear cycles
will be required and the objective should be to reduce the cost of the linear solver by making the tolerances
not too restrictive. Also, this solver will usually use much less than NKRY=100 to achieve the specified LINEAR_TOL.
For ISOLVE_LINEAR=3, the linear system being solved is an exact linearization of the full nonlinear CFD residual.
Therefore, quadratic Newton convergence is expected and the problem should take no more than 100 to 200 nonlinear
cycles to reach full (machine precision convergence) with proper settings. LINEAR_TOL = 1.e-02 has been found
to be a good setting. At the end of the quadratic convergence, this should produce one order or more reduction
in the nonlinear residual at each outer nonlinear iteration, while not being too expensive to solve at the start
and intermediate phases of the solution process.
In more difficult cases, smaller LINEAR_TOL values may be required to ensure convergence (1.E-03 to 1.E-05).
However, this will increase the cost of each nonlinear step.
Additionally, these tolerances may not be met with the prescribed number of NKRY.
In fact, often LINEAR_TOL = 1.E-02 may not be achieved with only NKRY = 100.
In such cases, the linear solver will exit before reaching the linear tolerance and will continue.
If the achieved linear tolerance is less than the value set by LINEAR_TOL_MIN, then this will be considered
a problem and the CFL number will be reduced by the line-search controller.
The default value for LINEAR_TOL_MIN is 0.1, and this can be set in the OPTIONAL PARAMETER list.
CFL Controller:
By default ISOLVE_LINEAR=1 uses a simple CFL ramping strategy
whereas ISOLVE_LINEAR=2,3 uses a more sophisticated CFL controller based on a line search.
The line search controller is theoretically sound for ISOLVE_LINEAR=3 (since this is an exact Newton solver)
but only approximate for ISOLVE_LINEAR=2 (inexact Newton solver).
At the first iteration, the controller sets CFL = CFL_MIN (default = 10).
CFL_MIN can be specified as an optional parameters, and the current default is 10.
At each nonlinear step, the correction (dw) obtained from the linear system solution
is added to the previous solution values and the nonlinear residual is evaluated as:
R_p(w_new) = R_p(w_old + alpha *dw)
The residual is evaluated using the values of alpha=0.0,0.1,0.5,1.0
The value of alpha that produces the largest decrease in the residual is chosen and the update is performed.
If alpha=1.0 is used (full update), the controller increases the CFL value as
CFL_NEW = CFL_OLD * cfl_factr4 (default value = 1.5), i.e. increase by 50%.
If alpha=0.0 is used (no update), the controller decreases the CFL value as:
CFL_NEW = CFL_OLD * cfl_factr1 (default value = 0.1), i.e. decrease by factor of 10.
In between values are updated accordingly with values of cfl_factr2 and cfl_factr3.
Current default values are set as:
cfl_factr1 = 0.1
cfl_factr2 = 0.5
cfl_factr3 = 1.0
cfl_factr4 = 1.5
These defaults can be modified by specifying new values as optional parameters in the input file.
Note that the residual R_p used for the line search is the residual that includes the CFL term (pseudo time term)
and is different from the steady-state residual.
For ISOLVE_LINEAR=2, these are always different.
For ISOLVE_LINEAR=3, when the CFL becomes very large (near the end of convergence)
these two are nearly identical, but at the beginning of the solution process they are different,
and decreases in R_p do not necessarily produce decreases in the steady-state residual.
Nevertheless, good reduction in R_p is an indication of successful progress of the Newton solver.
The controller also monitors the solution for negative density/energy/pressure values and reduces
alpha and CFL to prevent these. One mode of failure for the Newton solver is to get stuck near
solutions which tend to produce negative values and continually reduce alpha and CFL.
If CFL < CFL_STALL or ALPHA_MAX < ALPHA_STALL the solver will exit.
Current default values are set as:
CFL_STALL = 1.e-06
ALPHA_STALL = 1.e-06
These are NOT optional parameters, but are hardwired inside the routine line_search4.f
Generally, if the ISOLVE_LINEAR=3 solver stalls, it can be remedied by starting with a smoother
initial condition (running a first order solution or partially convergeing using nonlinear multigrid,
using FSOLVER_TYPE). However, in the event that a non-negative steady-state solution does not exist,
the discretization will need to be modified to achieve convergence
(i.e. change VIS2 values or use limiting, either max vertex degree limiting (NV_DEGREE_MAX),
or region limiting (NLIM_REGION))
For ISOLVE_LINEAR=2,3 the solver will exit when the steady-state residual reaches the prescribed non-linear tolerance.
This tolerance is set by the parameter NONLINEAR_TOL. The current default is set as:
NONLINEAR_TOL = 1.e-08
The value of NONLINEAR_TOL can be set as an optional parameter in the input file.
For ISOLVE_LINEAR=3 (exact Newton solver) we expect that the solver will reach this tolerance
and exit before executing the full number of prescribed nonlinear cycles (which is generally not very large).
This is because the exact Newton solver achieves rapid convergence at the end, and if it uses all available
nonlinear cycles and has not reached the NONLINEAR_TOL value, it has likely stalled or is not close to
final convergence.
Smaller NONLINEAR_TOL values closer to machine zero can be used (i.e. 1.E-12),
but sometimes the solver stalls at low values due to machine roundoff error
and uses all prescribed nonlinear cycles, which can be costly in CPU time.
For ISOLVE_LINEAR=2, nonlinear convergence is more linear and gradual, and thus often exiting
with the full number of prescribed cycles will produce a well converged solution that may be close
to the NONLINEAR_TOL value. On the other hand, these weaker solvers are more prone to stagnation at
low residual values and may never achieve the prescribed NONLINEAR_TOL value, although the stalled
solution may be adequate for engineering purposes.
LINEAR SOLVER OUTPUTS:
In order to monitor convergence, the traditional rplot.out files can be used, but also the more specialized
nonlinear_rplot.out and linear_rplot.out files should be viewed.
The rplot.out file is the baseline file output by all solvers and previously used for the nonlinear SG/MG solvers.
One must realize that the rplot.out file does NOT log the residuals directly.
Rather the rplot.out file logs the correction applied at each step, ie. dw, not R(w).
In general we have:
w_new = w_old + [P] R(w_old)
and thus the correction is taken as:
dw = [P] R(w_old)
Thus the correction is proportional to the residual (for a simple explicit scheme [P] = -Delta t) and indeed
can be used to measure convergence. This was done in the original Jameson codes to avoid recomputing the new
residual at each iteration, which would significantly increase the cost of a cycle.
On the other hand, the nonlinear_rplot.out file logs the true state-state residual of the complete
flow and turbulence model coupled system (as well as density and turbulence residuals separately).
Note that the corrections applied by the solvers ISOLVE_LINEAR=2,3 are scaled by alpha (and also affected by CFL).
In cases when a correction is rejected (alpha=0.0) the correction is = 0.0 and will show up
as such in the rplot.out file. However, this does not mean that the problem has converged.
Therefore, significant spikes in the convergence history obtained from the rplot.out file are possible.
Also, in the event the solver stalls (CFL << 1 or ALPHA << 1) the corrections will also become very small
and may look like convergence is being approached if only the rplot file is consulted.
For this reason, if the solver stalls, the last line in the rplot file is overwritten with corrections = 1.0
and CL (or CFORCE) = 0.0
Therefore, in order to assess convergence for ISOLVE_LINEAR=2,3 cases, the nonlinear_rplot.out
file should always be viewed.
In general, it is useful to have both files and for well converging cases, both should show similar trends.
nonlinear_rplot.out: This file plots values at each nonlinear iteration for ISOLVE_LINEAR=2,3 cases.
In addition to the true steady-state residuals and the CL (or CFORCE) values, the number of linear iterations
(Krylov vectors used) at each nonlinear step are given, as well as the cummulative (sum of all) Krylov
vectors used at each step. The total number of Krylov vectors is a good indication of overall solution cost.
The CFL values at each nonlinear step are also given, as well as the alpha values used.
linear_rplot.out: This file plots the linear residual (for the fully coupled flow and turbulence system)
at each linear cycle over all nonlinear cycles. This provides an indication of the convergence of the linear
system at each nonlinear step over the entire solution process.
------------------------------------------------------------------------------------------------------
CL DRIVER:
The CL driver has been upgraded to include any force parameter that is computed by the code as the driving quantity.
The CL driver is fully backward compatible, and thus the same inputs based on CL or CZ can be used
as with previous versions.
In order to enable the generalized CFORCE driver, the following lines should be included in the place
of the previous CL or CZ driver, ahead of the MESH DATA FILE lines.
OPTIONAL FORCE/MOMENT DRIVER: 137
TARGET_F F_TOL ALPHA_TOL DCFDA(estimate)
0.50000 1.e-04 1.e-08 0.1
NFTRY NCYC_EACH NCYC_FINAL
10. 100. 200.
To enable the CFORCE driver, the input reader keys on the initial characters: OPTIONAL FORCE/MOMENT DRIVER:
The number entered after this string specifies the actual force or moment coefficient
to use as the driving quantity. These are defined in the code in init_hist.f as the hist10_name entries.
The possible values are given here:
hist10_name(101) = 'CX'
hist10_name(102) = 'CY'
hist10_name(103) = 'CZ'
hist10_name(104) = 'CXP'
hist10_name(105) = 'CYP'
hist10_name(106) = 'CZP'
hist10_name(107) = 'CXF'
hist10_name(108) = 'CYF'
hist10_name(109) = 'CZF'
hist10_name(110) = 'CMX'
hist10_name(111) = 'CMY'
hist10_name(112) = 'CMZ'
hist10_name(113) = 'CMXP'
hist10_name(114) = 'CMYP'
hist10_name(115) = 'CMZP'
hist10_name(116) = 'CMXF'
hist10_name(117) = 'CMYF'
hist10_name(118) = 'CMZF'
hist10_name(119) = 'CL'
hist10_name(120) = 'CD'
hist10_name(121) = 'CSIDE'
hist10_name(122) = 'CLP'
hist10_name(123) = 'CDP'
hist10_name(124) = 'CSIDEP'
hist10_name(125) = 'CLF'
hist10_name(126) = 'CDF'
hist10_name(127) = 'CSIDEF'
hist10_name(128) = 'CM_PITCH'
hist10_name(129) = 'CM_YAW'
hist10_name(130) = 'CM_ROLL'
hist10_name(131) = 'CM_PITCHP'
hist10_name(132) = 'CM_YAWP'
hist10_name(133) = 'CM_ROLLP'
hist10_name(134) = 'CM_PITCHF'
hist10_name(135) = 'CM_YAWF'
hist10_name(136) = 'CM_ROLLF'
hist10_name(137) = 'CL_S'
hist10_name(138) = 'CD_S'
hist10_name(139) = 'CS_S'
hist10_name(140) = 'CM_PITCH_S'
hist10_name(141) = 'CM_YAW_S'
hist10_name(142) = 'CM_ROLL_S'
Thus, the value 137 in the above example specifies CL_S, i.e. CL computed in the stability axes.
The remaining parameters are analoguous to those used in the previous CL driver.
TARGET_F F_TOL ALPHA_TOL DCFDA(estimate)
0.50000 1.e-04 1.e-08 0.1
NFTRY NCYC_EACH NCYC_FINAL
10. 100. 200.
TARGET_F is the target value to be achieved for the specified force/moment coefficient.
F_TOL is the tolerance to which this value should be matched.
ALPHA_TOL is the tolerance to which the incidence should be mathced.
DCFDA is an estimate of the sensitivity of dCFORCE/dalpha.
A reasonable estimate is needed for a successful CFORCE driver execution.
Thus, if a moment or drag coefficient is specified rather than a lift coefficient,
DCFDA must be specified appropriately, perhaps by performing two fixed alpha runs
and finite differencing the values before proceeding with the driver run.
NFTRY is the max number of cycles used by the driver.
NCYC_EACH is the max number of cycles used at each driver cycle.
NCYC_FINAL is the max number of cycles used in the final convergence of the resulting alpha case.
-------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------
New OPTIONAL VARIABLES:
-------------------------------------------------------------------------------------------------------------------------------
ISAFE_MG > 0 enhances robustness of multigrid (but may slow down convergence of MG cases that converge with ISAFE_MG=0)
For nonlinear (FAS) multigrid, corrections restricted to coarse grid are multiplied by RELAX_MG=0.5 (set in resid_fix.f)
and also limited to be no larger than coarse grid residual/ISAFE_MG.
Thus if each coarse level is stable on its own (for example using grid sequencing (MMESH)), then FAS MG should converge.
Note larger values of ISAFE_MG > 1 can be used for more limiting.
For linear MG, ISAFE_MG currently only multiplies restricted residual term by RELAX_MG=0.5 (set in linear_collc_part1.f)
This is not as effective and in some cases FAS MG may converge with ISAFE_MG=1 but the corresponding linearMG case diverges (still under investigation).
Default value : ISAFE_MG= 0
NV_DEGREE_MAX: Max vertex degree above which code either stops (if NPASS_VERTEX_LIMIT=-1) or applies limiting.
Current default: NV_DEGREE_MAX = 40. (Note: average vertex degree for tetrahedral mesh = 14).
NPASS_VERTEX_DEGREE: Number of passes to extend NV_DEGREE_MAX limting to neighbors.
NPASS_VERTEX_DEGREE = 0: Limiting performed only on vertices with degree greater than NV_DEGREE_MAX.
NPASS_VERTEX_DEGREE = n: Extend limiting to n neighbors from high degree vertices.
NPASS_VERTEX_DEGREE = -1: If vertices with degree > NV_DEGREE_MAX detected, stop execution and print message.
Current default: NPASS_VERTEX_DEGREE = 3
IRESIDUAL_SMOOTH: Controls residual smoothing for Newton Krylov solvers
(ISOLVE_LINEAR=2,3, (i.e. in line_search4.f) but only recommended for ISOLVE_LINEAR=3)
IRESIDUAL_SMOOTH = 1: Turn on residual smoothing
IRESIDUAL_SMOOTH = 0: No residual smoothing
Current default: IRESIDUAL_SMOOTH = 0
IRESIDUAL_SMOOTH_NCYC: Number of nonlinear cycles for residual smoothing (only active if IRESIDUAL_SMOOTH=1)
IRESIDUAL_SMOOTH_NMESH: Number of levels in multigrid for residual smoothing (only active if IRESIDUAL_SMOOTH=1)
ISOLVER_DEBUG_OUTPUT: Produces additional output for debugging linear solver. (but produces clutter in output).
For nonlinear solver, also send Fine/Coarse grid limiting messages to std out (6) rather than just stderr (0)).
CFL_MIN: Minimum/Starting CFL for linear solver. Each new instance of linear solver (from MMESH sequence) starts with CFL_MIN.
Line search can reduce CFL below this value, so it is not an absolute minimum, just a starting value.
Current default: CFL_MIN=10.0
CFL_MAX: Maximum CFL allowed for linear solver. For Newton-Krylov solver (ISOLVE_LINEAR=3) this shoould be very large to recover
quadratic convergence. For other linear solvers, limiting CFL to smaller values may enhance robustness.
Current default: CFL_MAX = 1.E+15
CFL_NFREEZE: Optionally freeze CFL ramping for first CFL_NFREEZE nonlinear cycles.
Curret Default: CFL_FREEZE = 2.0
CFL_TURB_RATIO: Ratio of CFL used for turbulence model and flow equations.
Values larger than 1 make turb model CFL larger than flow equation CFL.
Values less than 1 make turb model CFL smaller than flow equation CFL.
Current Default: CFL_TURB_RATIO = 1.0
CFL_GROWTH: CFL growth factor for line_search0.f (i.e. ILINEAR_SOLVE=1) type solver.
At each nonlinear step CFL is increased by factor CFL_GROWTH.
Current Default: CFL_GROWTH = 1.2
CFL_TIMEACC: Controls CFL ramping for time dependent runs, ONLY for line_search0.f (i.e. ILINEAR_SOLVE=1)
CFL_TIMEACC < 0: Always use ramping
CFL_TIMEACC = 0: Never use ramping
CFL_TIMEACC = N: Use ramping for first N time steps only
Current default: CFL_TIMEACC=0
NONLINEAR_TOL: Exit tolerance for linear solver. When nonlinear residual (combined flow and turbulence) reaches this value,
nonlinear iterations are terminated and linear solver exits. Not active for FAS MG solver.
Current default: NONLINEAR_TOL = 1.E-08
Smaller values may be useful (i.e. 1.E-12) but solver can sometimes fail to reach tolerance due to
machine roundoff error if set too low.
PC_TOL: Exit tolerance for preconditioner or linear solver for ISOLVE_LINEAR=1 case.
This is the 1st order discretization solver that single or multigrid performs directly in the case ISOLVE_LINEAR=1.
For PC_TOL << 1, tolerance is never met and
number of prescribed linear iterations is always performed.
Early exit is useful in beginning of convergence when CFL is small.
PC_TOL = 1.e-24 for GMRES solvers (ILINEAR_SOLVE=2,3) since variable number of preconditioner iterations would require use of
Flexible GMRES which is currently not implemented.
Current default: PC_TOL = 1.e-24
LINEAR_TOL_MIN: Minimum linear residual reduction required in linear solver to update nonlinear state.
LINEAR_TOL is the requested linear residual reduction at which the linear solver exits.
However, if this tolerance is not met, line search and updates are still performed and effects of partial convergence are ignored.
However, if LINEAR_TOL_MIN is not met, line search flags this step as a failure: Update is not performed (alpha=0.0)
and CFL is reduced by factor cfl_factr02.
Current default: LINEAR_TOL_MIN = 0.1
RCHANGE_MAX: Maximum allowed decrease in density or energy at each nonlinear update in line_search.
If full update exceeds this change, alpha_max is set < 1 to prevent large decreases in density/energy.
Current default: RCHANGE_MAX = 0.5
cfl_factr1: CFL factor (reduction) when alpha = 0.0 in line-search. (Update rejected).
Current default value: cfl_factr1 = 0.1
cfl_factr2: CFL factor when alpha=0.1 in line search.
Current default value: cfl_factr2=0.5
cfl_factr3: CFL factor when alpha=0.5 in line search
Current default value: cfl_factr3=1.0 (no change)
cfl_factr4: CFL factor when alpha=1.0 in line search (full update).
Current default value: cfl_factr4 = 1.5
cfl_factr01: CFL factor (reduction) when alpha_max < 0.5 (caused by negative values or RCHANGE_MAX)
Current default value: cfl_factri01 = 0.5
cfl_factr02: CFL factor (reduction) when LINEAR_TOL_MIN not met.
Current default value: cfl_factr02 = 0.1
LINE_SEARCH_TYPE: Currently only 2 values:
LINE_SEARCH_TYPE = 0: Use line_search0.f which is a simple ramp of CFL from CFL_MIN to CFL_MAX with rate of CFL_GROWTH.
Also, CFL can be frozen for first CFL_NFREEZE cycles.
LINE_SEARCH_TYPE > 0: Use full line search in line_search4.f
Current default values: LINE_SEARCH_TYPE = 0 for ISOLVER_TYPE = 1.0, otherwise LINE_SEARCH_TYPE=3.0
NONLINEAR_TOL_MIN: Not active.
INSBC_WEAK: Toggle strong (=0) or weak (=1) wall boundary condition.
INSBC_WEAK=1 not fully supported for all solvers.
Current default: INSBC_WEAK=0.0
INSBC_LIMIT: Optional limiting of density at ghost points behind wall boundary condition points.
INSBC_LIMIT = 0: Dirichlet Unlimited
INSBC_LIMIT = 1: Dirichlet with rho=1 at gpts
INSBC_LIMIT = 2: Dirichlet with rho<2 at gpts
Current default: INSBC_LIMIT = 2.0
INEG_SA : INEG_SA=0,1 toggles between original SA (=0) and negative SA (=1) turbulence model.
Used mostly for backward compatibility.
Default value: INEG_SA = 1
CFL_COARSE_MAX: Maxium value of CFL on coarse multigrid levels in linear multigrid solver.
CFL_CORSE_MAX = -1: Use same as fine level.
Default value: CFL_COARSE_MAX = 10.0
NLIM_REGION: Enables specifiction of regions to be limited to 1st order accuracy.
NLIM_REGION = 0: No region limiting.
NLIM_REGION > 0: Number of regions to be limited.
This triggers code to read specification input file called limit_region.nsu3d
See description of this file. File should contain at least the number of regions specified in NLIM_REGION
(additional regions are ignored).
Default value: NLIM_REGION = 0.0
FLIM_VIS0: Value of artificial dissipation to use in limited regions (either due to NV_DEGREE_MAX or NLIM_REGION or both).
By default FLIM_VIS is assigned the value of vis0 in the nsu3d input file, so if it is not specified as an optional
parameter, vis0 is used at these limited points.
Default value: FLIM_VIS0 = vis0
KBLANK: KBLANK=1 enables iblanking for overset meshing.
Set automatically in most cases.
Default value: KBLANK=0 (no iblanking).
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
Some other hard coded inputs that can be set to different default values can be found in the following routines:
init_io.f
init_hist.f
nsu3d_init1.f
nsu3d_init2.f
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------