1*7f296bb3SBarry Smith# Changes: 3.16 2*7f296bb3SBarry Smith 3*7f296bb3SBarry Smith% STYLE GUIDELINES: 4*7f296bb3SBarry Smith% * Capitalize sentences 5*7f296bb3SBarry Smith% * Use imperative, e.g., Add, Improve, Change, etc. 6*7f296bb3SBarry Smith% * Don't use a period (.) at the end of entries 7*7f296bb3SBarry Smith% * If multiple sentences are needed, use a period or semicolon to divide sentences, but not at the end of the final sentence 8*7f296bb3SBarry Smith 9*7f296bb3SBarry Smith```{rubric} General: 10*7f296bb3SBarry Smith``` 11*7f296bb3SBarry Smith 12*7f296bb3SBarry Smith- Change `MPIU_Allreduce()` to always returns a MPI error code that 13*7f296bb3SBarry Smith should be checked with `CHKERRMPI(ierr)` 14*7f296bb3SBarry Smith- Add support for A64FX and Cray compilers 15*7f296bb3SBarry Smith- Add support for ESSL 5.2 and later; drop support for ESSL \<=5.1 16*7f296bb3SBarry Smith- Add support for NEC-SX Tsubasa Vector Engine 17*7f296bb3SBarry Smith- Add support for NVIDIA HPC SDK 18*7f296bb3SBarry Smith 19*7f296bb3SBarry Smith```{rubric} Configure/Build: 20*7f296bb3SBarry Smith``` 21*7f296bb3SBarry Smith 22*7f296bb3SBarry Smith- Configure requires Python-2.7 or Python-3.4+. 23*7f296bb3SBarry Smith- Remove `--with-kokkos-cuda-arch`. One can use `-with-cuda-gencodearch` to specify the cuda arch for Kokkos. Usually not needed since PETSc auto detects that 24*7f296bb3SBarry Smith- For `--download-hdf5`, disable `--download-hdf5-fortran-bindings` by default 25*7f296bb3SBarry Smith- Add OpenCascade package to PETSc and allow `--download-opencascade` 26*7f296bb3SBarry Smith- Add support for hypre in device mode for both NVIDIA and AMD GPUs 27*7f296bb3SBarry Smith- Extend detection of C++ dialect to C++17. Configure now also takes minimum and maximum required C++ dialect of packages into account when choosing the C++ dialect 28*7f296bb3SBarry Smith 29*7f296bb3SBarry Smith```{rubric} Sys: 30*7f296bb3SBarry Smith``` 31*7f296bb3SBarry Smith 32*7f296bb3SBarry Smith- Add `PetscDevice` class to manage discovered GPU devices 33*7f296bb3SBarry Smith- Add `PetscDeviceKind` 34*7f296bb3SBarry Smith- Add `PetscDeviceCreate()`, `PetscDeviceConfigure()`, and `PetscDeviceDestroy()` 35*7f296bb3SBarry Smith- Add `PetscDeviceContext` class to manage asynchronous GPU compute support via a fork-join model 36*7f296bb3SBarry Smith- Add `PetscStreamType` and `PetscDeviceContextJoinMode` 37*7f296bb3SBarry Smith- Add `PetscDeviceContextCreate()`, `PetscDeviceContextDestroy()`, `PetscDeviceContextSetDevice()`, `PetscDeviceContextGetDevice()`, 38*7f296bb3SBarry Smith `PetscDeviceContextSetStreamType()`, `PetscDeviceContextGetStreamType()`, `PetscDeviceContextSetUp()`, `PetscDeviceContextDuplicate()`, 39*7f296bb3SBarry Smith `PetscDeviceContextQueryIdle()`, `PetscDeviceContextWaitForContext()`, `PetscDeviceContextFork()`, `PetscDeviceContextJoin()`, 40*7f296bb3SBarry Smith `PetscDeviceContextSynchronize()`, `PetscDeviceContextGetCurrentContext()`, `PetscDeviceContextSetCurrentContext()`, and 41*7f296bb3SBarry Smith `PetscDeviceContextSetFromOptions()` 42*7f296bb3SBarry Smith- Deprecate `petsccublas.h` and `petschipblas.h` in favor of `petscdevice.h` and `petscdevicetypes.h` 43*7f296bb3SBarry Smith- Add GPU event timers to capture kernel execution time accurately 44*7f296bb3SBarry Smith- Remove `WaitForCUDA()` and `WaitForHIP()` before `PetscLogGpuTimeEnd()` 45*7f296bb3SBarry Smith- Add MPIU_REAL_INT and MPIU_SCALAR_INT datatypes to be used for reduction operations 46*7f296bb3SBarry Smith- Add MPIU_MAXLOC and MPIU_MINLOC operations 47*7f296bb3SBarry Smith- Add `CHKERRCXX()` to catch C++ exceptions and return a PETSc error code 48*7f296bb3SBarry Smith- Remove `PetscStack` routines from public headers, this class should now be considered private 49*7f296bb3SBarry Smith 50*7f296bb3SBarry Smith```{rubric} PetscViewer: 51*7f296bb3SBarry Smith``` 52*7f296bb3SBarry Smith 53*7f296bb3SBarry Smith- `PetscViewerHDF5PushGroup()`: if input path begins with `/`, it is 54*7f296bb3SBarry Smith taken as absolute, otherwise relative to the current group 55*7f296bb3SBarry Smith- Add `PetscViewerHDF5HasDataset()` 56*7f296bb3SBarry Smith- `PetscViewerHDF5HasAttribute()`, 57*7f296bb3SBarry Smith `PetscViewerHDF5ReadAttribute()`, 58*7f296bb3SBarry Smith `PetscViewerHDF5WriteAttribute()`, 59*7f296bb3SBarry Smith `PetscViewerHDF5HasDataset()` and 60*7f296bb3SBarry Smith `PetscViewerHDF5HasGroup()` 61*7f296bb3SBarry Smith support absolute paths (starting with `/`) 62*7f296bb3SBarry Smith and paths relative to the current pushed group 63*7f296bb3SBarry Smith- Add input argument to `PetscViewerHDF5ReadAttribute()` for default 64*7f296bb3SBarry Smith value that is used if attribute is not found in the HDF5 file 65*7f296bb3SBarry Smith- Add `PetscViewerHDF5PushTimestepping()`, 66*7f296bb3SBarry Smith `PetscViewerHDF5PopTimestepping()` and 67*7f296bb3SBarry Smith `PetscViewerHDF5IsTimestepping()` to control timestepping mode. 68*7f296bb3SBarry Smith- One can call `PetscViewerHDF5IncrementTimestep()`, 69*7f296bb3SBarry Smith `PetscViewerHDF5SetTimestep()` or `PetscViewerHDF5GetTimestep()` only 70*7f296bb3SBarry Smith if timestepping mode is active 71*7f296bb3SBarry Smith- Error if timestepped dataset is read/written out of timestepping mode, or 72*7f296bb3SBarry Smith vice-versa 73*7f296bb3SBarry Smith 74*7f296bb3SBarry Smith```{rubric} PetscDraw: 75*7f296bb3SBarry Smith``` 76*7f296bb3SBarry Smith 77*7f296bb3SBarry Smith```{rubric} AO: 78*7f296bb3SBarry Smith``` 79*7f296bb3SBarry Smith 80*7f296bb3SBarry Smith```{rubric} IS: 81*7f296bb3SBarry Smith``` 82*7f296bb3SBarry Smith 83*7f296bb3SBarry Smith```{rubric} VecScatter / PetscSF: 84*7f296bb3SBarry Smith``` 85*7f296bb3SBarry Smith 86*7f296bb3SBarry Smith```{rubric} PF: 87*7f296bb3SBarry Smith``` 88*7f296bb3SBarry Smith 89*7f296bb3SBarry Smith```{rubric} Vec: 90*7f296bb3SBarry Smith``` 91*7f296bb3SBarry Smith 92*7f296bb3SBarry Smith- Add `VecMean()` to calculate arithmetic mean of elements of a vector 93*7f296bb3SBarry Smith- Add `VecBoundToCPU()` to query information set with `VecBindToCPU()` 94*7f296bb3SBarry Smith 95*7f296bb3SBarry Smith```{rubric} PetscSection: 96*7f296bb3SBarry Smith``` 97*7f296bb3SBarry Smith 98*7f296bb3SBarry Smith- Extend `PetscSectionView()` for section saving to HDF5 99*7f296bb3SBarry Smith- Add `PetscSectionLoad()` for section loading from HDF5 100*7f296bb3SBarry Smith 101*7f296bb3SBarry Smith```{rubric} PetscPartitioner: 102*7f296bb3SBarry Smith``` 103*7f296bb3SBarry Smith 104*7f296bb3SBarry Smith```{rubric} Mat: 105*7f296bb3SBarry Smith``` 106*7f296bb3SBarry Smith 107*7f296bb3SBarry Smith- `MATMPIKAIJ` now tracks the object state of the AIJ matrix describing the blockwise action of the KAIJ matrix and 108*7f296bb3SBarry Smith automatically rebuilds internal data structures before executing operations with the KAIJ matrix if the state has changed 109*7f296bb3SBarry Smith- Factorization types now provide their preferred ordering (which 110*7f296bb3SBarry Smith may be `MATORDERINGEXTERNAL`) to prevent PETSc PCFactor from, by 111*7f296bb3SBarry Smith default, picking an ordering when it is not ideal 112*7f296bb3SBarry Smith- Deprecate `MatFactorGetUseOrdering()`; Use 113*7f296bb3SBarry Smith `MatFactorGetCanUseOrdering()` instead 114*7f296bb3SBarry Smith- Add `--download-htool` to use hierarchical matrices with the new 115*7f296bb3SBarry Smith type `MATHTOOL` 116*7f296bb3SBarry Smith- Add `MATCENTERING` special matrix type that implements action of the 117*7f296bb3SBarry Smith centering matrix 118*7f296bb3SBarry Smith- Remove -mat_mumps_icntl_7 1 option, use -pc_factor_mat_ordering_type \<type> to have PETSc perform the ordering (sequential only) 119*7f296bb3SBarry Smith- Add `MATSOLVERSPQR` - interface to SuiteSparse QR factorization 120*7f296bb3SBarry Smith- Add `MatSeqAIJKron()` - Kronecker product of two `MatSeqAIJ` 121*7f296bb3SBarry Smith- Add `MatNormalGetMat()` to retrieve the underlying `Mat` of a `MATNORMAL` 122*7f296bb3SBarry Smith- Add `MatNormalHermitianGetMat()` to retrieve the underlying `Mat` of a `MATNORMALHERMITIAN` 123*7f296bb3SBarry Smith- Add `VecCreateMPICUDA()` and `VecCreateMPIHIP()` to create MPI device vectors 124*7f296bb3SBarry Smith- Add accessor routines for device index data of `MATSEQAIJCUSPARSE` matrices: `MatSeqAIJCUSPARSEGetIJ()` and `MatSeqAIJCUSPARSERestoreIJ()` 125*7f296bb3SBarry Smith- Add accessor routines for device data of `MATSEQAIJCUSPARSE` matrices: `MatSeqAIJCUSPARSEGetArray()`, `MatSeqAIJCUSPARSERestoreArray()`, `MatSeqAIJCUSPARSEGetArrayRead()`, `MatSeqAIJCUSPARSERestoreArrayRead()`. `MatSeqAIJCUSPARSEGetArrayWrite()`, `MatSeqAIJCUSPARSERestoreArrayWrite()` 126*7f296bb3SBarry Smith- Add support for `MATHYPRE` matrices on NVIDIA and AMD GPUs 127*7f296bb3SBarry Smith- `MatPreallocatorPreallocate` performance [significantly improved](https://gitlab.com/petsc/petsc/-/merge_requests/4273) 128*7f296bb3SBarry Smith- Add `MatGetColumnReductions()` developer routine to calculate reductions over columns of a matrix 129*7f296bb3SBarry Smith- Add `MatGetColumnSums()`, `MatGetColumnSumsRealPart()`, `MatGetColumnSumsImaginaryPart()` to compute sums over matrix columns 130*7f296bb3SBarry Smith- Add `MatGetColumnMeans()`, `MatGetColumnMeansRealPart()`, `MatGetColumnMeansImaginaryPart()` to compute arithmetic means over matrix columns 131*7f296bb3SBarry Smith- Add `MatBoundToCPU()` to query information set with `MatBindToCPU()` 132*7f296bb3SBarry Smith- Rename `MATHARA` in `MATH2OPUS`, supporting distributed memory operations with hierarchical matrices 133*7f296bb3SBarry Smith 134*7f296bb3SBarry Smith```{rubric} PC: 135*7f296bb3SBarry Smith``` 136*7f296bb3SBarry Smith 137*7f296bb3SBarry Smith- Add `PCSetPreSolve()` 138*7f296bb3SBarry Smith- Add `PCQR` - interface to SuiteSparse QR factorization for `MatSeqAIJ`, 139*7f296bb3SBarry Smith `MATNORMAL`, and `MATNORMALHERMITIAN` 140*7f296bb3SBarry Smith- Add support for `MATNORMAL` in `PCASM` and `PCHPDDM` 141*7f296bb3SBarry Smith- Add support for BoomerAMG from `PCHYPRE` to run on NVIDIA and AMD GPUs 142*7f296bb3SBarry Smith- `PCShellGetContext()` now takes `void*` as return argument 143*7f296bb3SBarry Smith- Rename `PCHARA` in `PCH2OPUS`, supporting distributed memory operations with hierarchical matrices 144*7f296bb3SBarry Smith 145*7f296bb3SBarry Smith```{rubric} KSP: 146*7f296bb3SBarry Smith``` 147*7f296bb3SBarry Smith 148*7f296bb3SBarry Smith- `KSPGetMonitorContext()` now takes `void*` as return argument 149*7f296bb3SBarry Smith- `KSPGetConvergenceContext()` now takes `void*` as return argument 150*7f296bb3SBarry Smith 151*7f296bb3SBarry Smith```{rubric} SNES: 152*7f296bb3SBarry Smith``` 153*7f296bb3SBarry Smith 154*7f296bb3SBarry Smith- Add `SNESSetComputeMFFunction()` 155*7f296bb3SBarry Smith- Add support for `-snes_mf_operator` for use with `SNESSetPicard()` 156*7f296bb3SBarry Smith- `SNESShellGetContext()` now takes `void*` as return argument 157*7f296bb3SBarry Smith 158*7f296bb3SBarry Smith```{rubric} SNESLineSearch: 159*7f296bb3SBarry Smith``` 160*7f296bb3SBarry Smith 161*7f296bb3SBarry Smith```{rubric} TS: 162*7f296bb3SBarry Smith``` 163*7f296bb3SBarry Smith 164*7f296bb3SBarry Smith- Add `-ts_type irk` - fully implicit Runge-Kutta solvers 165*7f296bb3SBarry Smith- Add `TSTrajectory` interface to the CAMS library for optimal offline checkpointing for multistage time stepping schemes 166*7f296bb3SBarry Smith- Add option `-ts_trajectory_memory_type <revolve | cams | petsc>` to switch checkpointing schedule software 167*7f296bb3SBarry Smith- Add option `-ts_trajectory_max_units_ram` to specify the maximum number of allowed checkpointing units 168*7f296bb3SBarry Smith 169*7f296bb3SBarry Smith```{rubric} TAO: 170*7f296bb3SBarry Smith``` 171*7f296bb3SBarry Smith 172*7f296bb3SBarry Smith- `TaoShellGetContext()` now takes `void*` as return argument 173*7f296bb3SBarry Smith 174*7f296bb3SBarry Smith```{rubric} DM/DA: 175*7f296bb3SBarry Smith``` 176*7f296bb3SBarry Smith 177*7f296bb3SBarry Smith- Change management of auxiliary data in DM from object composition 178*7f296bb3SBarry Smith to `DMGetAuxiliaryVec()`/`DMSetAuxiliaryVec()`, `DMCopyAuxiliaryVec()` 179*7f296bb3SBarry Smith- Remove `DMGetNumBoundary()` and `DMGetBoundary()` in favor of DS 180*7f296bb3SBarry Smith counterparts 181*7f296bb3SBarry Smith- Remove `DMCopyBoundary()` 182*7f296bb3SBarry Smith- Change interface for `DMAddBoundary()`, `PetscDSAddBoundary()`, 183*7f296bb3SBarry Smith `PetscDSGetBoundary()`, `PetscDSUpdateBoundary()` 184*7f296bb3SBarry Smith- Add `DMDAVecGetArrayDOFWrite()` and `DMDAVecRestoreArrayDOFWrite()` 185*7f296bb3SBarry Smith- `DMShellGetContext()` now takes `void*` as return argument 186*7f296bb3SBarry Smith 187*7f296bb3SBarry Smith```{rubric} DMSwarm: 188*7f296bb3SBarry Smith``` 189*7f296bb3SBarry Smith 190*7f296bb3SBarry Smith- Add `DMSwarmGetCellSwarm()` and `DMSwarmRestoreCellSwarm()` 191*7f296bb3SBarry Smith 192*7f296bb3SBarry Smith```{rubric} DMPlex: 193*7f296bb3SBarry Smith``` 194*7f296bb3SBarry Smith 195*7f296bb3SBarry Smith- Add a `PETSCVIEWEREXODUSII` viewer type for `DMView()`/`DMLoad()` and 196*7f296bb3SBarry Smith `VecView()`/`VecLoad()`. Note that not all DMPlex can be saved in exodusII 197*7f296bb3SBarry Smith format since this file format requires that the numbering of cell 198*7f296bb3SBarry Smith sets be compact 199*7f296bb3SBarry Smith- Add `PetscViewerExodusIIOpen()` convenience function 200*7f296bb3SBarry Smith- Add `PetscViewerExodusIISetOrder()` to 201*7f296bb3SBarry Smith generate "2nd order" elements (i.e. tri6, tet10, hex27) when using 202*7f296bb3SBarry Smith `DMView` with a `PETSCVIEWEREXODUSII` viewer 203*7f296bb3SBarry Smith- Change `DMPlexComputeBdResidualSingle()` and 204*7f296bb3SBarry Smith `DMPlexComputeBdJacobianSingle()` to take a form key 205*7f296bb3SBarry Smith- Add `DMPlexTopologyLoad()`, `DMPlexCoordinatesLoad()`, and 206*7f296bb3SBarry Smith `DMPlexLabelsLoad()` for incremental loading of a `DMPlex` object 207*7f296bb3SBarry Smith from an HDF5 file 208*7f296bb3SBarry Smith- Add `DMPlexTopologyView()`, `DMPlexCoordinatesView()`, and 209*7f296bb3SBarry Smith `DMPlexLabelsView()` for incremental saving of a `DMPlex` object 210*7f296bb3SBarry Smith to an HDF5 file 211*7f296bb3SBarry Smith- Add `DMPlexSectionView()` saving a `PetscSection` in 212*7f296bb3SBarry Smith association with a `DMPlex` mesh 213*7f296bb3SBarry Smith- Add `DMPlexSectionLoad()` loading a `PetscSection` in 214*7f296bb3SBarry Smith association with a `DMPlex` mesh 215*7f296bb3SBarry Smith- Add `DMPlexGlobalVectorView()` and `DMPlexLocalVectorView()` saving 216*7f296bb3SBarry Smith global and local vectors in association with a data layout on a `DMPlex` mesh 217*7f296bb3SBarry Smith- Add `DMPlexGlobalVectorLoad()` and `DMPlexLocalVectorLoad()` loading 218*7f296bb3SBarry Smith global and local vectors in association with a data layout on a `DMPlex` mesh 219*7f296bb3SBarry Smith- Add `DMPlexIsSimplex()` to check the shape of the first cell 220*7f296bb3SBarry Smith- Add `DMPlexShape` to describe prebuilt mesh domains 221*7f296bb3SBarry Smith- Add `DMPlexCreateCoordinateSpace()` to make an FE space for the coordinates 222*7f296bb3SBarry Smith- Add the automatic creation of a Plex from options, see `DMSetFromOptions()` 223*7f296bb3SBarry Smith- The old options for `DMPlexCreateBoxMesh()` NO LONGER WORK. They have been changed to make the interface more uniform 224*7f296bb3SBarry Smith- Replace `DMPlexCreateSquareBoundary()` and `DMPlexCreateCubeBoundary()` with `DMPlexCreateBoxSurfaceMesh()` 225*7f296bb3SBarry Smith- Remove `DMPlexCreateReferenceCellByType()` 226*7f296bb3SBarry Smith- The number of refinements is no longer an argument to `DMPlexCreateHexCylinderMesh()` 227*7f296bb3SBarry Smith- Add `DMSetLabel()` 228*7f296bb3SBarry Smith- Replace `DMPlexComputeJacobianAction()` with `DMSNESComputeJacobianAction()` 229*7f296bb3SBarry Smith- Add `DMSNESCreateJacobianMF()` 230*7f296bb3SBarry Smith- Change `DMPlexComputeBdResidualSingle()` to take `PetscFormKey` instead of explicit label/value/field arguments 231*7f296bb3SBarry Smith- Add `DMPlexInflateToGeomModel()` which pushes refined points out to a geometric boundary 232*7f296bb3SBarry Smith- Separate EGADS and EGADSLite functionality, add `DMPlexCreateEGADSLiteFromFile()` 233*7f296bb3SBarry Smith- Remove `DMPlexReverseCell()` and `DMPlexOrientCell()` in favor of `DMPlexOrientPoint()` 234*7f296bb3SBarry Smith- Remove `DMPlexCompareOrientations()` in favor of `DMPolytopeMatchOrientation()` 235*7f296bb3SBarry Smith- Add `DMPlexGetCompressedClosure()` and `DMPlexRestoreCompressedClosure()` 236*7f296bb3SBarry Smith- Add `DMPlexMetricCreate` as a helper function for creating a (P1) Riemannian metric. 237*7f296bb3SBarry Smith- Add `DMPlexMetricCreateUniform` as a helper function for creating a uniform metric. 238*7f296bb3SBarry Smith- Add `DMPlexMetricCreateIsotropic` as a helper function for creating an isotropic metric. 239*7f296bb3SBarry Smith- Add `DMPlexMetricEnforceSPD` for enforcing that a metric is symmetric positive-definite. 240*7f296bb3SBarry Smith- Add `DMPlexMetricNormalize` to apply L-p metric normalization. 241*7f296bb3SBarry Smith- Add `DMPlexMetricAverage` to average an arbitrary number of metrics. 242*7f296bb3SBarry Smith- Add `DMPlexMetricAverage2` to average two metrics. 243*7f296bb3SBarry Smith- Add `DMPlexMetricAverage3` to average three metrics. 244*7f296bb3SBarry Smith- Add `DMPlexMetricIntersection` to intersect an arbitrary number of metrics. 245*7f296bb3SBarry Smith- Add `DMPlexMetricIntersection2` to intersect two metrics. 246*7f296bb3SBarry Smith- Add `DMPlexMetricIntersection3` to intersect three metrics. 247*7f296bb3SBarry Smith 248*7f296bb3SBarry Smith```{rubric} FE/FV: 249*7f296bb3SBarry Smith``` 250*7f296bb3SBarry Smith 251*7f296bb3SBarry Smith- Change `PetscFEIntegrateBdResidual()` and 252*7f296bb3SBarry Smith `PetscFEIntegrateBdJacobian()` to take both `PetscWeakForm` and form 253*7f296bb3SBarry Smith key 254*7f296bb3SBarry Smith- Add `PetscFEGeomGetPoint()` and `PetscFEGeomGetCellPoint` to package up geometry handling 255*7f296bb3SBarry Smith 256*7f296bb3SBarry Smith```{rubric} DMNetwork: 257*7f296bb3SBarry Smith``` 258*7f296bb3SBarry Smith 259*7f296bb3SBarry Smith- Add `DMNetworkCreateIS()` and `DMNetworkCreateLocalIS()` 260*7f296bb3SBarry Smith- Remove nv from `DMNetworkAddSubnetwork()` 261*7f296bb3SBarry Smith 262*7f296bb3SBarry Smith```{rubric} DMStag: 263*7f296bb3SBarry Smith``` 264*7f296bb3SBarry Smith 265*7f296bb3SBarry Smith- Add `DMStagStencilToIndexLocal()` 266*7f296bb3SBarry Smith 267*7f296bb3SBarry Smith```{rubric} DT: 268*7f296bb3SBarry Smith``` 269*7f296bb3SBarry Smith 270*7f296bb3SBarry Smith- Add `PetscWeakFormCopy()`, `PetscWeakFormClear()`, `PetscWeakFormRewriteKeys()` and `PetscWeakFormClearIndex()` 271*7f296bb3SBarry Smith- Add `PetscDSDestroyBoundary()` and `PetscDSCopyExactSolutions()` 272*7f296bb3SBarry Smith- `PetscDSGetContext()` now takes `void*` as return argument 273*7f296bb3SBarry Smith- Add `PetscWeakFormReplaceLabel()` to change labels after mesh modification 274*7f296bb3SBarry Smith 275*7f296bb3SBarry Smith```{rubric} Fortran: 276*7f296bb3SBarry Smith``` 277*7f296bb3SBarry Smith 278*7f296bb3SBarry Smith- Add support for `PetscInitialize(filename,help,ierr)`, 279*7f296bb3SBarry Smith `PetscInitialize(ierr)` in addition to current `PetscInitialize(filename,ierr)` 280