xref: /petsc/doc/changes/33.md (revision b11d9968bc79904c690b122f9399be46447eb113)
1*7f296bb3SBarry Smith# Changes: 3.3
2*7f296bb3SBarry Smith
3*7f296bb3SBarry Smith```{rubric} config/configure.py:
4*7f296bb3SBarry Smith```
5*7f296bb3SBarry Smith
6*7f296bb3SBarry Smith- Building PETSc using CMake is enabled automatically if CMake is
7*7f296bb3SBarry Smith  installed (enabling parallel builds and fast incremental builds),
8*7f296bb3SBarry Smith  otherwise the plain make-based system is used.
9*7f296bb3SBarry Smith- Added --with-cuda-only flag to allow compiling CUDA files without
10*7f296bb3SBarry Smith  requiring Thrust and Cusp
11*7f296bb3SBarry Smith
12*7f296bb3SBarry Smith```{rubric} Vec:
13*7f296bb3SBarry Smith```
14*7f296bb3SBarry Smith
15*7f296bb3SBarry Smith- VecCreateSeqWithArray() and VecCreateMPIWithArray() now take a
16*7f296bb3SBarry Smith  blocksize argument before the local length
17*7f296bb3SBarry Smith- VecSetBlockSize() cannot be called after VecCreateSeq() or
18*7f296bb3SBarry Smith  VecCreateMPI() and must be called before VecSetUp() or
19*7f296bb3SBarry Smith  VecSetFromOptions() or before either VecSetType() or VecSetSizes()
20*7f296bb3SBarry Smith
21*7f296bb3SBarry Smith```{rubric} Mat:
22*7f296bb3SBarry Smith```
23*7f296bb3SBarry Smith
24*7f296bb3SBarry Smith- MatScaleSystem() and MatUnScaleSystem() are gone, they didn't do
25*7f296bb3SBarry Smith  anything.
26*7f296bb3SBarry Smith- Renamed MatNullSpaceAttach() to MatSetNullSpace()
27*7f296bb3SBarry Smith- MatMult() no longer removes the nullspace set by MatSetNullSpace()
28*7f296bb3SBarry Smith- Renamed MatMatMultTranspose() for C=A^T\*B to MatTransposeMatMult()
29*7f296bb3SBarry Smith- Added MatMatTransposeMult() for C=A\*B^T
30*7f296bb3SBarry Smith- Added MatRARt() for C=R\*A\*R^T
31*7f296bb3SBarry Smith- Preallocation routines now automatically set
32*7f296bb3SBarry Smith  MAT_NEW_NONZERO_ALLOCATION_ERR, if you intentionally preallocate
33*7f296bb3SBarry Smith  less than necessary then use
34*7f296bb3SBarry Smith  MatSetOption(mat,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_FALSE) to
35*7f296bb3SBarry Smith  disable the error generation.
36*7f296bb3SBarry Smith- MatSetBlockSize() must be called before MatSetUp() or
37*7f296bb3SBarry Smith  MatXXXXSetPreallocation() or block size defaults to 1
38*7f296bb3SBarry Smith- -mat_block_size is NOT processed by MatXXXXSetPreallocation() you
39*7f296bb3SBarry Smith  MUST call MatSetFromOptions() before MatSetUp() to have it
40*7f296bb3SBarry Smith  processed
41*7f296bb3SBarry Smith- You MUST now call MatXXXSetPreallocation() or MatSetUp() on any
42*7f296bb3SBarry Smith  matrix you create directly (not using DMCreateMatrix()) before
43*7f296bb3SBarry Smith  calling MatSetValues(), MatSetValuesBlocked() etc.
44*7f296bb3SBarry Smith- MatGetOwnershipRange() will not work without setting up the
45*7f296bb3SBarry Smith  matrix.
46*7f296bb3SBarry Smith- MatSetUpPreallocation() and MatPreallocated() are removed, use
47*7f296bb3SBarry Smith  MatSetUp()
48*7f296bb3SBarry Smith- MatPreallocateSymmetricInitialize() is removed, use
49*7f296bb3SBarry Smith  MatPreallocateInitialize()
50*7f296bb3SBarry Smith- MatCreateMPIAIJ(), MatCreateMPIBAIJ(), MatCreateMPISBAIJ(),
51*7f296bb3SBarry Smith  MatCreateMPIDense() are now MatCreateAIJ(), MatCreateBAIJ(),
52*7f296bb3SBarry Smith  MatCreateSBAIJ(), MatCreateDense(). Note that on a single process
53*7f296bb3SBarry Smith  they have always created the sequential version of the matrix so
54*7f296bb3SBarry Smith  this naming is more accurate.
55*7f296bb3SBarry Smith- Renamed MatMerge_SeqsToMPI() to MatCreateMPIAIJSumSeqAIJ()
56*7f296bb3SBarry Smith- Renamed MatMerge() to MatCreateMPIAIJConcatenateSeqAIJ()
57*7f296bb3SBarry Smith- Added block size in call to MatCreateIS()
58*7f296bb3SBarry Smith- MatInvertBlockDiagonal() now returns a const pointer
59*7f296bb3SBarry Smith
60*7f296bb3SBarry Smith```{rubric} PC:
61*7f296bb3SBarry Smith```
62*7f296bb3SBarry Smith
63*7f296bb3SBarry Smith- Remove PCASASetDM(), use PCSetDM() instead.
64*7f296bb3SBarry Smith- Add PCFieldSplitSetSchurFactType(), rename
65*7f296bb3SBarry Smith  -pc_fieldsplit_schur_factorization_type to
66*7f296bb3SBarry Smith  -pc_fieldsplit_schur_fact_type.
67*7f296bb3SBarry Smith- Added native algebraic multigrid method -pc_type gamg. Aggregation
68*7f296bb3SBarry Smith  method is recommended: -pc_gamg_type agg and for elliptic
69*7f296bb3SBarry Smith  operators smoothing is recommended: -pc_gamg_agg_nsmooths 1.
70*7f296bb3SBarry Smith- PCSetCoordinates(PC,PetscInt,PetscInt,PetscReal\*) added second
71*7f296bb3SBarry Smith  integer argument for number of local vertices.
72*7f296bb3SBarry Smith- Added PCISSetSubdomainScalingFactor(PC,PetscScalar).
73*7f296bb3SBarry Smith- ```{rubric} PCGASM:
74*7f296bb3SBarry Smith  ```
75*7f296bb3SBarry Smith  - Remove PCGASMSetLocalSubdomains(), use PCGASMSetSubdomains();
76*7f296bb3SBarry Smith    **note:** the first argument is now the list of "inner"
77*7f296bb3SBarry Smith    subdomains (without overlap), unlike before and for PCASM
78*7f296bb3SBarry Smith  - PCGASMSetTotalSubdomains(PC,PetscInt,PetscBool); added third
79*7f296bb3SBarry Smith    argument to indicate whether local subdomains should be
80*7f296bb3SBarry Smith    constructed.
81*7f296bb3SBarry Smith  - Removed PCGASMCreateSubdomains(), use
82*7f296bb3SBarry Smith    PCGASMCreateLocalSubdomains(Mat,PetscInt,PetscInt,IS\*[],IS\*[]);
83*7f296bb3SBarry Smith    second PetscInt argument is requested overlap
84*7f296bb3SBarry Smith  - PCGASMCreateSubdomains2D(PC,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt\*,IS[]\*,IS[]\*):
85*7f296bb3SBarry Smith    the 9-th and 10-th argument have been swapped: the 9-th outputs
86*7f296bb3SBarry Smith    the inner subdomains, the 10-th outputs the outer subdomains.
87*7f296bb3SBarry Smith- PCMG multigrid defaults changed to use a Chebyshev smoother with
88*7f296bb3SBarry Smith  block Jacobi Gauss-Seidel relaxation. This is a linear
89*7f296bb3SBarry Smith  preconditioner so it can be used with normal Krylov methods rather
90*7f296bb3SBarry Smith  than only flexible methods, as well as having fewer
91*7f296bb3SBarry Smith  synchronization pointst. Use
92*7f296bb3SBarry Smith  `-mg_levels_ksp_type gmres -mg_levels_ksp_max_it 1 -mg_levels_pc_type bjacobi`
93*7f296bb3SBarry Smith  for the original behavior.
94*7f296bb3SBarry Smith
95*7f296bb3SBarry Smith```{rubric} KSP:
96*7f296bb3SBarry Smith```
97*7f296bb3SBarry Smith
98*7f296bb3SBarry Smith- KSPSetOperators() will automatically set the null space present on
99*7f296bb3SBarry Smith  the input matrix
100*7f296bb3SBarry Smith- Renamed KSPCHEBYCHEV to KSPCHEBYSHEV
101*7f296bb3SBarry Smith- Added Hybrid CHEBYCHEV (-ksp_chebyshev_hybrid)
102*7f296bb3SBarry Smith- Added pipelined GMRES (KSPPGMRES) which performs one non-blocking
103*7f296bb3SBarry Smith  reduction per iteration instead of two blocking reductions.
104*7f296bb3SBarry Smith- Added flexible BiCGStab (KSPFBCGS) which tolerates a nonlinear
105*7f296bb3SBarry Smith  preconditioner (like KSPFGMRES).
106*7f296bb3SBarry Smith- Added improved flexible BiCGStab (KSPIFBCGS) which tolerates a
107*7f296bb3SBarry Smith  nonlinear preconditioner and performs one reduction every other
108*7f296bb3SBarry Smith  iteration (like KSPIBCGS).
109*7f296bb3SBarry Smith
110*7f296bb3SBarry Smith```{rubric} SNES:
111*7f296bb3SBarry Smith```
112*7f296bb3SBarry Smith
113*7f296bb3SBarry Smith- Added SNESGetSNESLineSearch
114*7f296bb3SBarry Smith- Changed default max_its and max_funcs for non-newton SNES solvers
115*7f296bb3SBarry Smith  to 10000 and 30000 respectively
116*7f296bb3SBarry Smith- Changed options and command-line arguments for SNESFAS to be in
117*7f296bb3SBarry Smith  line with PCMG
118*7f296bb3SBarry Smith- Added quasi-Newton (SNESQN), Nonlinear GMRES (SNESNGMRES),
119*7f296bb3SBarry Smith  nonlinear conjugate gradients (SNESNCG), and multi-stage methods
120*7f296bb3SBarry Smith  (SNESMS, used as a smoother for nonlinear multigrid).
121*7f296bb3SBarry Smith- Support for Full Approximation Scheme nonlinear multigrid
122*7f296bb3SBarry Smith  (SNESFAS) moved from DMMG to SNES and made composable with the
123*7f296bb3SBarry Smith  methods above.
124*7f296bb3SBarry Smith- SNES line search type should be set by name with
125*7f296bb3SBarry Smith  SNESLineSearchSetType rather than with SNESLineSearchSet, see
126*7f296bb3SBarry Smith  below.
127*7f296bb3SBarry Smith
128*7f296bb3SBarry Smith```{rubric} SNESLineSearch:
129*7f296bb3SBarry Smith```
130*7f296bb3SBarry Smith
131*7f296bb3SBarry Smith- SNESLineSearch object added
132*7f296bb3SBarry Smith- The default SNESLineSearch of a SNES may be gotten with
133*7f296bb3SBarry Smith  SNESGetSNESLineSearch(SNES snes, SNESLineSearch \*linesearch)
134*7f296bb3SBarry Smith- The linesearch type may be set with SNESLineSearchSetType() or
135*7f296bb3SBarry Smith  -snes_linesearch_type
136*7f296bb3SBarry Smith- The line search (and pre and post checks) is applied using
137*7f296bb3SBarry Smith  SNESLineSearchApply()
138*7f296bb3SBarry Smith- Pre/Post-check methods may be set with
139*7f296bb3SBarry Smith  SNESLineSearchSetPre/PostCheck()
140*7f296bb3SBarry Smith- The previous steplength may be accessed through
141*7f296bb3SBarry Smith  SNESLineSearchSetLambda()
142*7f296bb3SBarry Smith- The damping parameter may be set through
143*7f296bb3SBarry Smith  SNESLineSearchSetDamping() or -snes_linesearch_damping
144*7f296bb3SBarry Smith- Success of the line search is determined using
145*7f296bb3SBarry Smith  SNESLineSearchGetSuccess()
146*7f296bb3SBarry Smith- Custom linesearches may be built through
147*7f296bb3SBarry Smith  SNESLINESEARCHSHELL,("shell") or by registering a new linesearch
148*7f296bb3SBarry Smith  type with SNESLineSearchRegisterDynamic()
149*7f296bb3SBarry Smith- SNESLINESEARCHBT,("bt") replaces SNES_LS_CUBIC and
150*7f296bb3SBarry Smith  SNES_LS_QUADRATIC, and order may be set with
151*7f296bb3SBarry Smith  SNESLineSearchSetOrder() or -snes_linesearch_order
152*7f296bb3SBarry Smith- SNESLINESEARCHBASIC,("basic") replaces SNES_LS_BASIC and
153*7f296bb3SBarry Smith  SNES_LS_BASICNONORMS. Norms may be turned off with
154*7f296bb3SBarry Smith  SNESLineSearchSetComputeNorms() or -snes_linesearch_norms 0
155*7f296bb3SBarry Smith- SNESLineSearchSetTolerances() replaces SNESLSSetParams(), with the
156*7f296bb3SBarry Smith  former alpha parameter set with SNESLineSearchBTSetAlpha() or
157*7f296bb3SBarry Smith  -snes_linesearch_alpha
158*7f296bb3SBarry Smith- Added Line Search type SNESLINESEARCHL2,("l2") as the default for
159*7f296bb3SBarry Smith  NRICHARDSON
160*7f296bb3SBarry Smith- SNESLINESEARCHCP,("cp") added as the default line search method
161*7f296bb3SBarry Smith  for SNESNCG and SNESQN
162*7f296bb3SBarry Smith
163*7f296bb3SBarry Smith```{rubric} TS:
164*7f296bb3SBarry Smith```
165*7f296bb3SBarry Smith
166*7f296bb3SBarry Smith- -ts_max_time changed to -ts_final_time
167*7f296bb3SBarry Smith- TSDefaultComputeJacobian() and TSDefaultComputeJacobianColor()
168*7f296bb3SBarry Smith  have been removed. Configure TS to use coloring with
169*7f296bb3SBarry Smith  SNESSetJacobian().
170*7f296bb3SBarry Smith- Added TSROSW for Rosenbrock-W methods.
171*7f296bb3SBarry Smith- Added a common, extensible system for adaptive controllers, see
172*7f296bb3SBarry Smith  TSGetAdapt().
173*7f296bb3SBarry Smith
174*7f296bb3SBarry Smith```{rubric} DM/DA:
175*7f296bb3SBarry Smith```
176*7f296bb3SBarry Smith
177*7f296bb3SBarry Smith- Added DMCreateDecomposition(DM,PetscInt,char\*[]\*,IS[]\*,DM[]\*) for
178*7f296bb3SBarry Smith  use with PCFIELDSPLIT,PCASM,PCGASM
179*7f296bb3SBarry Smith- Added DMCreateDecompositionDM(DM,const char\*,DM\*) to create a
180*7f296bb3SBarry Smith  version of the DM encapsulating a named decomposition; use with
181*7f296bb3SBarry Smith  DMCreateDecomposition()
182*7f296bb3SBarry Smith- Added DMRedundant for managing globally coupled degrees of
183*7f296bb3SBarry Smith  freedom.
184*7f296bb3SBarry Smith- Removed DMCompositeAddArray(), use DMRedundantCreate() and
185*7f296bb3SBarry Smith  DMCompositeAddDM().
186*7f296bb3SBarry Smith- Renamed DMGetMatrix(), DMGetInterpolation(), DMGetInjection(), and
187*7f296bb3SBarry Smith  DMGetColoring() to DMCreateMatrix(), etc for semantic consistency.
188*7f296bb3SBarry Smith- The communicator argument to DMRefine() and DMCoarsen() can be
189*7f296bb3SBarry Smith  MPI_COMM_NULL, but not PETSC_NULL, because the latter may not be
190*7f296bb3SBarry Smith  the correct type.
191*7f296bb3SBarry Smith- Added DMCoarsenHookAdd() and DMRefineHookAdd() for shepherding
192*7f296bb3SBarry Smith  persistent resolution-dependent data between levels.
193*7f296bb3SBarry Smith- Added DMGetNamedGlobalVector() for storing persistent
194*7f296bb3SBarry Smith  resolution-dependent data.
195*7f296bb3SBarry Smith- DMDASNESSetFunctionLocal() and DMDASNESSetJacobianLocal() can be
196*7f296bb3SBarry Smith  used for convenient local evaluation; these routines will
197*7f296bb3SBarry Smith  eventually replace DMDASetLocalFunction() and
198*7f296bb3SBarry Smith  DMDASetLocalJacobian().
199*7f296bb3SBarry Smith
200*7f296bb3SBarry Smith```{rubric} DMMG:
201*7f296bb3SBarry Smith```
202*7f296bb3SBarry Smith
203*7f296bb3SBarry Smith- DMMG is now completely removed from PETSc. Equivalent (and better)
204*7f296bb3SBarry Smith  functionality can now be obtained by calling SNESSetDM() or
205*7f296bb3SBarry Smith  KSPSetDM(). Make sure to avoid resolution-dependent data in the
206*7f296bb3SBarry Smith  user context. Use SNESGetDM() or KSPGetDM() in the function
207*7f296bb3SBarry Smith  evaluation context to obtain the grid. DMGetNamedGlobalVector(),
208*7f296bb3SBarry Smith  DMCoarsenHookAdd(), and DMRefineHookAdd() can be used to manage
209*7f296bb3SBarry Smith  persistent resolution-dependent data.
210*7f296bb3SBarry Smith
211*7f296bb3SBarry Smith```{rubric} PetscViewer:
212*7f296bb3SBarry Smith```
213*7f296bb3SBarry Smith
214*7f296bb3SBarry Smith- A VTK binary viewer was added, see PETSCVIEWERVTK.
215*7f296bb3SBarry Smith
216*7f296bb3SBarry Smith```{rubric} SYS:
217*7f296bb3SBarry Smith```
218*7f296bb3SBarry Smith
219*7f296bb3SBarry Smith- PetscBagLoad() now requires you previously created and registered
220*7f296bb3SBarry Smith  all the records in the PETSc bag, allows loading on systems with
221*7f296bb3SBarry Smith  different struct layout/endianness.
222*7f296bb3SBarry Smith- PetscSF added as a type-generic graph communication mechanism. The
223*7f296bb3SBarry Smith  current implementation requires MPI-2 one-sided and the interface
224*7f296bb3SBarry Smith  is currently optional.
225*7f296bb3SBarry Smith
226*7f296bb3SBarry Smith```{rubric} Fortran:
227*7f296bb3SBarry Smith```
228*7f296bb3SBarry Smith
229*7f296bb3SBarry Smith- PETSC_NULL_TRUTH is now PETSC_NULL_BOOL
230*7f296bb3SBarry Smith- PetscOptionsGetEnum() now available from Fortran
231*7f296bb3SBarry Smith
232*7f296bb3SBarry Smith```{rubric} ExternalPackages:
233*7f296bb3SBarry Smith```
234*7f296bb3SBarry Smith
235*7f296bb3SBarry Smith- The Hypre interface was updated to 2.8.0b and now supports 64-bit
236*7f296bb3SBarry Smith  integers.
237*7f296bb3SBarry Smith- SuperLU_DIST interface updated to 3.1.
238*7f296bb3SBarry Smith- SuperLU interface updated to 4.3.
239*7f296bb3SBarry Smith- Sundials interface updated to 2.5.0.
240*7f296bb3SBarry Smith- FFTW interface updated to 3.3.2.
241*7f296bb3SBarry Smith- ParMetis updated to 4.0.2 and split from Metis 5.0.2 which is now
242*7f296bb3SBarry Smith  separate.
243*7f296bb3SBarry Smith
244*7f296bb3SBarry Smith```{rubric} Build:
245*7f296bb3SBarry Smith```
246*7f296bb3SBarry Smith
247*7f296bb3SBarry Smith- If Python 2.7 is available, the config/builder2.py is now
248*7f296bb3SBarry Smith  available for a complete build, including dependency tracking.
249*7f296bb3SBarry Smith
250*7f296bb3SBarry Smith```{rubric} Examples:
251*7f296bb3SBarry Smith```
252*7f296bb3SBarry Smith
253*7f296bb3SBarry Smith- SNES ex62 illustrates the use of DMComplex to solve the Stokes
254*7f296bb3SBarry Smith  equation on an unstructured mesh. The Python tests show how to use
255*7f296bb3SBarry Smith  block preconditioning strategies from the command line.
256*7f296bb3SBarry Smith- SNES ex52 illustrates the use of CUDA for FEM integration
257