Changes: 3.3#
config/configure.py:
Building PETSc using CMake is enabled automatically if CMake is installed (enabling parallel builds and fast incremental builds), otherwise the plain make-based system is used.
Added –with-cuda-only flag to allow compiling CUDA files without requiring Thrust and Cusp
Vec:
VecCreateSeqWithArray() and VecCreateMPIWithArray() now take a blocksize argument before the local length
VecSetBlockSize() cannot be called after VecCreateSeq() or VecCreateMPI() and must be called before VecSetUp() or VecSetFromOptions() or before either VecSetType() or VecSetSizes()
Mat:
MatScaleSystem() and MatUnScaleSystem() are gone, they didn’t do anything.
Renamed MatNullSpaceAttach() to MatSetNullSpace()
MatMult() no longer removes the nullspace set by MatSetNullSpace()
Renamed MatMatMultTranspose() for C=A^T*B to MatTransposeMatMult()
Added MatMatTransposeMult() for C=A*B^T
Added MatRARt() for C=R*A*R^T
Preallocation routines now automatically set MAT_NEW_NONZERO_ALLOCATION_ERR, if you intentionally preallocate less than necessary then use MatSetOption(mat,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_FALSE) to disable the error generation.
MatSetBlockSize() must be called before MatSetUp() or MatXXXXSetPreallocation() or block size defaults to 1
-mat_block_size is NOT processed by MatXXXXSetPreallocation() you MUST call MatSetFromOptions() before MatSetUp() to have it processed
You MUST now call MatXXXSetPreallocation() or MatSetUp() on any matrix you create directly (not using DMCreateMatrix()) before calling MatSetValues(), MatSetValuesBlocked() etc.
MatGetOwnershipRange() will not work without setting up the matrix.
MatSetUpPreallocation() and MatPreallocated() are removed, use MatSetUp()
MatPreallocateSymmetricInitialize() is removed, use MatPreallocateInitialize()
MatCreateMPIAIJ(), MatCreateMPIBAIJ(), MatCreateMPISBAIJ(), MatCreateMPIDense() are now MatCreateAIJ(), MatCreateBAIJ(), MatCreateSBAIJ(), MatCreateDense(). Note that on a single process they have always created the sequential version of the matrix so this naming is more accurate.
Renamed MatMerge_SeqsToMPI() to MatCreateMPIAIJSumSeqAIJ()
Renamed MatMerge() to MatCreateMPIAIJConcatenateSeqAIJ()
Added block size in call to MatCreateIS()
MatInvertBlockDiagonal() now returns a const pointer
PC:
Remove PCASASetDM(), use PCSetDM() instead.
Add PCFieldSplitSetSchurFactType(), rename -pc_fieldsplit_schur_factorization_type to -pc_fieldsplit_schur_fact_type.
Added native algebraic multigrid method -pc_type gamg. Aggregation method is recommended: -pc_gamg_type agg and for elliptic operators smoothing is recommended: -pc_gamg_agg_nsmooths 1.
PCSetCoordinates(PC,PetscInt,PetscInt,PetscReal*) added second integer argument for number of local vertices.
Added PCISSetSubdomainScalingFactor(PC,PetscScalar).
PCGASM:
Remove PCGASMSetLocalSubdomains(), use PCGASMSetSubdomains(); note: the first argument is now the list of “inner” subdomains (without overlap), unlike before and for PCASM
PCGASMSetTotalSubdomains(PC,PetscInt,PetscBool); added third argument to indicate whether local subdomains should be constructed.
Removed PCGASMCreateSubdomains(), use PCGASMCreateLocalSubdomains(Mat,PetscInt,PetscInt,IS*[],IS*[]); second PetscInt argument is requested overlap
PCGASMCreateSubdomains2D(PC,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt*,IS[]*,IS[]*): the 9-th and 10-th argument have been swapped: the 9-th outputs the inner subdomains, the 10-th outputs the outer subdomains.
PCMG multigrid defaults changed to use a Chebyshev smoother with block Jacobi Gauss-Seidel relaxation. This is a linear preconditioner so it can be used with normal Krylov methods rather than only flexible methods, as well as having fewer synchronization pointst. Use
-mg_levels_ksp_type gmres -mg_levels_ksp_max_it 1 -mg_levels_pc_type bjacobi
for the original behavior.
KSP:
KSPSetOperators() will automatically set the null space present on the input matrix
Renamed KSPCHEBYCHEV to KSPCHEBYSHEV
Added Hybrid CHEBYCHEV (-ksp_chebyshev_hybrid)
Added pipelined GMRES (KSPPGMRES) which performs one non-blocking reduction per iteration instead of two blocking reductions.
Added flexible BiCGStab (KSPFBCGS) which tolerates a nonlinear preconditioner (like KSPFGMRES).
Added improved flexible BiCGStab (KSPIFBCGS) which tolerates a nonlinear preconditioner and performs one reduction every other iteration (like KSPIBCGS).
SNES:
Added SNESGetSNESLineSearch
Changed default max_its and max_funcs for non-newton SNES solvers to 10000 and 30000 respectively
Changed options and command-line arguments for SNESFAS to be in line with PCMG
Added quasi-Newton (SNESQN), Nonlinear GMRES (SNESNGMRES), nonlinear conjugate gradients (SNESNCG), and multi-stage methods (SNESMS, used as a smoother for nonlinear multigrid).
Support for Full Approximation Scheme nonlinear multigrid (SNESFAS) moved from DMMG to SNES and made composable with the methods above.
SNES line search type should be set by name with SNESLineSearchSetType rather than with SNESLineSearchSet, see below.
SNESLineSearch:
SNESLineSearch object added
The default SNESLineSearch of a SNES may be gotten with SNESGetSNESLineSearch(SNES snes, SNESLineSearch *linesearch)
The linesearch type may be set with SNESLineSearchSetType() or -snes_linesearch_type
The line search (and pre and post checks) is applied using SNESLineSearchApply()
Pre/Post-check methods may be set with SNESLineSearchSetPre/PostCheck()
The previous steplength may be accessed through SNESLineSearchSetLambda()
The damping parameter may be set through SNESLineSearchSetDamping() or -snes_linesearch_damping
Success of the line search is determined using SNESLineSearchGetSuccess()
Custom linesearches may be built through SNESLINESEARCHSHELL,(“shell”) or by registering a new linesearch type with SNESLineSearchRegisterDynamic()
SNESLINESEARCHBT,(“bt”) replaces SNES_LS_CUBIC and SNES_LS_QUADRATIC, and order may be set with SNESLineSearchSetOrder() or -snes_linesearch_order
SNESLINESEARCHBASIC,(“basic”) replaces SNES_LS_BASIC and SNES_LS_BASICNONORMS. Norms may be turned off with SNESLineSearchSetComputeNorms() or -snes_linesearch_norms 0
SNESLineSearchSetTolerances() replaces SNESLSSetParams(), with the former alpha parameter set with SNESLineSearchBTSetAlpha() or -snes_linesearch_alpha
Added Line Search type SNESLINESEARCHL2,(“l2”) as the default for NRICHARDSON
SNESLINESEARCHCP,(“cp”) added as the default line search method for SNESNCG and SNESQN
TS:
-ts_max_time changed to -ts_final_time
TSDefaultComputeJacobian() and TSDefaultComputeJacobianColor() have been removed. Configure TS to use coloring with SNESSetJacobian().
Added TSROSW for Rosenbrock-W methods.
Added a common, extensible system for adaptive controllers, see TSGetAdapt().
DM/DA:
Added DMCreateDecomposition(DM,PetscInt,char*[]*,IS[]*,DM[]*) for use with PCFIELDSPLIT,PCASM,PCGASM
Added DMCreateDecompositionDM(DM,const char*,DM*) to create a version of the DM encapsulating a named decomposition; use with DMCreateDecomposition()
Added DMRedundant for managing globally coupled degrees of freedom.
Removed DMCompositeAddArray(), use DMRedundantCreate() and DMCompositeAddDM().
Renamed DMGetMatrix(), DMGetInterpolation(), DMGetInjection(), and DMGetColoring() to DMCreateMatrix(), etc for semantic consistency.
The communicator argument to DMRefine() and DMCoarsen() can be MPI_COMM_NULL, but not PETSC_NULL, because the latter may not be the correct type.
Added DMCoarsenHookAdd() and DMRefineHookAdd() for shepherding persistent resolution-dependent data between levels.
Added DMGetNamedGlobalVector() for storing persistent resolution-dependent data.
DMDASNESSetFunctionLocal() and DMDASNESSetJacobianLocal() can be used for convenient local evaluation; these routines will eventually replace DMDASetLocalFunction() and DMDASetLocalJacobian().
DMMG:
DMMG is now completely removed from PETSc. Equivalent (and better) functionality can now be obtained by calling SNESSetDM() or KSPSetDM(). Make sure to avoid resolution-dependent data in the user context. Use SNESGetDM() or KSPGetDM() in the function evaluation context to obtain the grid. DMGetNamedGlobalVector(), DMCoarsenHookAdd(), and DMRefineHookAdd() can be used to manage persistent resolution-dependent data.
PetscViewer:
A VTK binary viewer was added, see PETSCVIEWERVTK.
SYS:
PetscBagLoad() now requires you previously created and registered all the records in the PETSc bag, allows loading on systems with different struct layout/endianness.
PetscSF added as a type-generic graph communication mechanism. The current implementation requires MPI-2 one-sided and the interface is currently optional.
Fortran:
PETSC_NULL_TRUTH is now PETSC_NULL_BOOL
PetscOptionsGetEnum() now available from Fortran
The Hypre interface was updated to 2.8.0b and now supports 64-bit integers.
SuperLU_DIST interface updated to 3.1.
SuperLU interface updated to 4.3.
Sundials interface updated to 2.5.0.
FFTW interface updated to 3.3.2.
ParMetis updated to 4.0.2 and split from Metis 5.0.2 which is now separate.
Build:
If Python 2.7 is available, the config/builder2.py is now available for a complete build, including dependency tracking.
Examples:
SNES ex62 illustrates the use of DMComplex to solve the Stokes equation on an unstructured mesh. The Python tests show how to use block preconditioning strategies from the command line.
SNES ex52 illustrates the use of CUDA for FEM integration