File: 33.md.txt

package info (click to toggle)
petsc 3.23.1%2Bdfsg1-1exp1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 515,576 kB
  • sloc: ansic: 751,607; cpp: 51,542; python: 38,598; f90: 17,352; javascript: 3,493; makefile: 3,157; sh: 1,502; xml: 619; objc: 445; java: 13; csh: 1
file content (256 lines) | stat: -rw-r--r-- 10,203 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
# Changes: 3.3

```{rubric} 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

```{rubric} 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()

```{rubric} 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

```{rubric} 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).
- ```{rubric} 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.

```{rubric} 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).

```{rubric} 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.

```{rubric} 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

```{rubric} 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().

```{rubric} 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().

```{rubric} 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.

```{rubric} PetscViewer:
```

- A VTK binary viewer was added, see PETSCVIEWERVTK.

```{rubric} 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.

```{rubric} Fortran:
```

- PETSC_NULL_TRUTH is now PETSC_NULL_BOOL
- PetscOptionsGetEnum() now available from Fortran

```{rubric} ExternalPackages:
```

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

```{rubric} Build:
```

- If Python 2.7 is available, the config/builder2.py is now
  available for a complete build, including dependency tracking.

```{rubric} 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