xref: /petsc/doc/changes/32.md (revision b11d9968bc79904c690b122f9399be46447eb113)
1*7f296bb3SBarry Smith# Changes: 3.2
2*7f296bb3SBarry Smith
3*7f296bb3SBarry Smith```{rubric} General:
4*7f296bb3SBarry Smith```
5*7f296bb3SBarry Smith
6*7f296bb3SBarry Smith- --download-c-blas-lapack is replaced with --download-f2cblaslapack
7*7f296bb3SBarry Smith- --with-precision=\_\_float128 --download-f2cblaslapack is now
8*7f296bb3SBarry Smith  support for newish GNU gcc compiler
9*7f296bb3SBarry Smith- Calling sequence of PetscBinarRead.m has been changed
10*7f296bb3SBarry Smith- All XXXDestroy() functions now take a pointer to the object itself
11*7f296bb3SBarry Smith  so that it can be nullified after destruction.
12*7f296bb3SBarry Smith- PetscError() and SETERRQX() now take a MPI_Comm as the first
13*7f296bb3SBarry Smith  argument to indicate where the error is known. If you don't know
14*7f296bb3SBarry Smith  what communicator use then pass in PETSC_COMM_SELF
15*7f296bb3SBarry Smith- Added PetscObjectAddOptionsHandler() that allows adding new
16*7f296bb3SBarry Smith  routines to any object that are called to process options when
17*7f296bb3SBarry Smith  XXXSetFromOptions() is called.
18*7f296bb3SBarry Smith- Changed PetscTruth to PetscBool, PETSC_TRUTH to PETSC_BOOL,
19*7f296bb3SBarry Smith  PetscOptionsTruth to PetscOptionsBool, etc.
20*7f296bb3SBarry Smith- Introduced PetscCopyMode
21*7f296bb3SBarry Smith- Changed -log_history to -history and PetscLogOpenHistory()
22*7f296bb3SBarry Smith  PetscLogCloseHistory() to PetscOpenHistory(), PetscCloseHistory()
23*7f296bb3SBarry Smith  because "log" is reserved for related to the performance logging
24*7f296bb3SBarry Smith- Changed PetscOptionsPrint() to PetscOptionsView()
25*7f296bb3SBarry Smith- Changed PetscLogPrintSummary() to PetscLogView()
26*7f296bb3SBarry Smith- Using gcc 4.6 you can now ./configure --with-precision=\_\_float128
27*7f296bb3SBarry Smith  --download-qblaslapack to get computations in quad precision.
28*7f296bb3SBarry Smith  gfortran 4.6 is also supported. Warning some of the PETSc printing
29*7f296bb3SBarry Smith  of numbers in some places will print garbage. I haven't figured
30*7f296bb3SBarry Smith  out a way to handle the %G format. Can be run in parallel :-)
31*7f296bb3SBarry Smith- PetscFListFind() now takes a searchlibraries flag, if this is set
32*7f296bb3SBarry Smith  and the function is NOT found in the function list then the
33*7f296bb3SBarry Smith  libraries and executable are searched (when shared or dynamic
34*7f296bb3SBarry Smith  libraries are used). Previously it always search the libraries and
35*7f296bb3SBarry Smith  executables if not found in the list.
36*7f296bb3SBarry Smith- PetscOpenMPxxx() utilities are now PetscHMPIxxx() for hierarchical
37*7f296bb3SBarry Smith  MPI, the previous name was bad
38*7f296bb3SBarry Smith
39*7f296bb3SBarry Smith```{rubric} Logging:
40*7f296bb3SBarry Smith```
41*7f296bb3SBarry Smith
42*7f296bb3SBarry Smith- PetscCookie changed to PetscClassId in all forms.
43*7f296bb3SBarry Smith
44*7f296bb3SBarry Smith```{rubric} config/configure.py:
45*7f296bb3SBarry Smith```
46*7f296bb3SBarry Smith
47*7f296bb3SBarry Smith- --with-64-bit-pointers option removed. It doesn't work properly
48*7f296bb3SBarry Smith  anyway. The user should specify the correct 32bit or 64bit
49*7f296bb3SBarry Smith  compilers to configure. For eg:
50*7f296bb3SBarry Smith  `configure --with-cc='gcc -m64'             --with-fc='gfortran -m64'`
51*7f296bb3SBarry Smith- Python requirement is changed from 2.2 to 2.3
52*7f296bb3SBarry Smith- Changed --with-shared to --with-shared-libraries,
53*7f296bb3SBarry Smith  --known-mpi-shared to --known-mpi-shared-libraries and
54*7f296bb3SBarry Smith  --with-dynamic to --with-dynamic-loading
55*7f296bb3SBarry Smith- 'ifneeded' support removed. '--download-package=ifneeded' should
56*7f296bb3SBarry Smith  now be '--download-package'
57*7f296bb3SBarry Smith- The make macro PETSC_INCLUDE has been replaced by
58*7f296bb3SBarry Smith  PETSC_CC_INCLUDES and PETSC_FC_INCLUDES for C and Fortran,
59*7f296bb3SBarry Smith  respectively.
60*7f296bb3SBarry Smith
61*7f296bb3SBarry Smith```{rubric} IS:
62*7f296bb3SBarry Smith```
63*7f296bb3SBarry Smith
64*7f296bb3SBarry Smith- ISBlock(),ISStride() are removed. Use
65*7f296bb3SBarry Smith  PetscTypeCompare((PetscObject)is,ISBLOCK,&flag),
66*7f296bb3SBarry Smith  PetscTypeCompare((PetscObject)is,ISSTRIDE,&flag) instead.
67*7f296bb3SBarry Smith- Added ISCreate(), ISSetType(), ISRegister() etc to match style of
68*7f296bb3SBarry Smith  other PETSc objects. Also added ISGeneralSetIndices(),
69*7f296bb3SBarry Smith  ISBlockSetIndices(), ISStrideSetStride()
70*7f296bb3SBarry Smith- ISCreateGeneral() and ISCreateBlock() now takes PetscCopyMode as
71*7f296bb3SBarry Smith  an argument and hence ISCreateGeneralNC() and
72*7f296bb3SBarry Smith  ISCreateGeneralWithArray() are not needed and removed. Use
73*7f296bb3SBarry Smith  ISCreateGeneral() with the argument PETSC_OWN_POINTER and
74*7f296bb3SBarry Smith  PETSC_USE_POINTER instead.
75*7f296bb3SBarry Smith- ISLocalToGlobalMappingCreate() now takes PetscCopyMode as an
76*7f296bb3SBarry Smith  additional argument and ISLocalToGlobalMappingCreateNC() is no
77*7f296bb3SBarry Smith  longer needed and removed
78*7f296bb3SBarry Smith- ISStrideToGeneral() is replaced with ISToGeneral() that works for
79*7f296bb3SBarry Smith  all basic IS types.
80*7f296bb3SBarry Smith- ISCreateBlock() now takes indexing relative to block, no longer
81*7f296bb3SBarry Smith  relative to element. This is to match the paradigm of
82*7f296bb3SBarry Smith  Vec/MatSetValuesBlocked()
83*7f296bb3SBarry Smith- ISBlockGetBlockSize() is now ISGetBlockSize(). Block sizes can be
84*7f296bb3SBarry Smith  set for conforming ISGENERAL and ISSTRIDE using ISSetBlockSize().
85*7f296bb3SBarry Smith- ISAllGatherIndices() is removed, use ISCreateGeneral() then
86*7f296bb3SBarry Smith  ISAllGather().
87*7f296bb3SBarry Smith
88*7f296bb3SBarry Smith```{rubric} PF:
89*7f296bb3SBarry Smith```
90*7f296bb3SBarry Smith
91*7f296bb3SBarry Smith- The source array is marked constant in PFApply and the callback.
92*7f296bb3SBarry Smith
93*7f296bb3SBarry Smith```{rubric} Vec:
94*7f296bb3SBarry Smith```
95*7f296bb3SBarry Smith
96*7f296bb3SBarry Smith- changed VecSqrt() to VecSqrtAbs()
97*7f296bb3SBarry Smith- VecLoad() and VecLoadIntoVector() have been merged into a single
98*7f296bb3SBarry Smith  NEW VecLoad() that takes a partially constructed vector as input
99*7f296bb3SBarry Smith  and loads according to any type or sizes that have previously been
100*7f296bb3SBarry Smith  set into the Vec.
101*7f296bb3SBarry Smith- VecDestroyVecs(PetscInt n,Vec \*\*) instead of
102*7f296bb3SBarry Smith  VecDestroyVecs(Vec\*\*,PetscInt n), also VecDestroyVecsF90(PetscInt
103*7f296bb3SBarry Smith  n,{Vec, pointer :: x},PetscErrorCode ierr)
104*7f296bb3SBarry Smith- VecLoad() does NOT access the options database to check for the
105*7f296bb3SBarry Smith  VecType, call VecSetFromOptions() first if you wish to check it.
106*7f296bb3SBarry Smith- VecDestroyVecs() now takes the pointer to the first array and
107*7f296bb3SBarry Smith  zeros it on return
108*7f296bb3SBarry Smith- VecDestroy() now zeros the pointer to the destroyed vector so it
109*7f296bb3SBarry Smith  cannot be reused
110*7f296bb3SBarry Smith- VecDestroyVecs(PetscInt n,Vec \*\*) instead of
111*7f296bb3SBarry Smith  VecDestroyVecs(Vec\*\*,PetscInt n)
112*7f296bb3SBarry Smith
113*7f296bb3SBarry Smith```{rubric} VecScatter:
114*7f296bb3SBarry Smith```
115*7f296bb3SBarry Smith
116*7f296bb3SBarry Smith- The ghost indices for VecCreateGhostBlock() and
117*7f296bb3SBarry Smith  VecCreateGhostBlockWithArray() are now by block instead of by
118*7f296bb3SBarry Smith  entry.
119*7f296bb3SBarry Smith
120*7f296bb3SBarry Smith```{rubric} Mat:
121*7f296bb3SBarry Smith```
122*7f296bb3SBarry Smith
123*7f296bb3SBarry Smith- MAT_SOLVER_XXX is now MATSOLVERXXX
124*7f296bb3SBarry Smith- MAT_PARTIONING_XXX is now MATPARTITIONINGXXX
125*7f296bb3SBarry Smith- MATCOLORING_XXX is now MATCOLORINGXXX
126*7f296bb3SBarry Smith- MATORDERING_XXX is now MATORDERINGXXX
127*7f296bb3SBarry Smith- It is an error to call MatSetOption() before the implementation
128*7f296bb3SBarry Smith  has been created (after MatSetSizes() and MatSetType()). Formerly,
129*7f296bb3SBarry Smith  options were silently ignored in this circumstance.
130*7f296bb3SBarry Smith- Added MatSetMumpsIcntl()
131*7f296bb3SBarry Smith- MatLoad() now takes a created Mat as input (and no longer a Mat
132*7f296bb3SBarry Smith  type), if you provide the size and type in the Mat then that is
133*7f296bb3SBarry Smith  used other defaults are used.
134*7f296bb3SBarry Smith- MATCRL -> MATAIJCRL, MATSEQCRL -> MATSEQAIJCRL, MATMPICRL ->
135*7f296bb3SBarry Smith  MATMPIAIJCRL
136*7f296bb3SBarry Smith- MatCreateSeqCRL() -> MatCreateSeqAIJCRL() MatCreateMPICRL() ->
137*7f296bb3SBarry Smith  MatCreateMPIAIJCRL()
138*7f296bb3SBarry Smith- MATCSRPERM -> MATAIJPERM, MATSEQCSRPERM -> MATSEQAIJPERM,
139*7f296bb3SBarry Smith  MATMPICSRPERM -> MATMPIAIJPERM
140*7f296bb3SBarry Smith- MatCreateSeqCSRPERM() -> MatCreateSeqAIJPERM()
141*7f296bb3SBarry Smith  MatCreateMPICSRPERM() -> MatCreateMPIAIJPERM()
142*7f296bb3SBarry Smith- Added MatZeroRowsColumns() and MatZeroRowsColumnsIS().
143*7f296bb3SBarry Smith- MatZeroRows() and MatZeroRowsIS() now take an x and b vector as
144*7f296bb3SBarry Smith  optional arguments; if these are provided then the b\[idx[i]\] is
145*7f296bb3SBarry Smith  set to diag\*x\[idx[i]\]\] for all rows listed in idx[].
146*7f296bb3SBarry Smith- MatSetLocalToGlobalMapping() and MatSetLocalToGlobalMappingBlock()
147*7f296bb3SBarry Smith  now take separate row and column maps. MatPreallocateSetLocal()
148*7f296bb3SBarry Smith  has an extra argument for the column mapping.
149*7f296bb3SBarry Smith- MatLoad() does NOT access the options database to check for the
150*7f296bb3SBarry Smith  MatType, call MatSetFromOptions() first if you wish to check it.
151*7f296bb3SBarry Smith- Removed MatMFFDSetFromOptions() since one can call
152*7f296bb3SBarry Smith  MatSetFromOptions()
153*7f296bb3SBarry Smith- MatGetLocalMat() and MatGetLocalMatCondensed() are now
154*7f296bb3SBarry Smith  MatMPIAIJGetLocalMat() and MatMPIAIJGetLocalMatCondensed()
155*7f296bb3SBarry Smith- MatOption MAT_USE_COMPRESSEDROW changed to
156*7f296bb3SBarry Smith  MAT_CHECK_COMPRESSED_ROW
157*7f296bb3SBarry Smith
158*7f296bb3SBarry Smith```{rubric} PC:
159*7f296bb3SBarry Smith```
160*7f296bb3SBarry Smith
161*7f296bb3SBarry Smith- PCFieldSplitSetIS() and PCFieldSplitSetFields() now take a
162*7f296bb3SBarry Smith  split-name parameter which is used to define the options database
163*7f296bb3SBarry Smith  keys.
164*7f296bb3SBarry Smith- CHOLMOD can be used for Cholesky factorization using AIJ or
165*7f296bb3SBarry Smith  SBAIJ(1) matrix formats.
166*7f296bb3SBarry Smith- PCREDUNDANT now uses the inner KSP with the inner PC. Default is
167*7f296bb3SBarry Smith  still preonly for KSP and LU for PC so default behavior is the
168*7f296bb3SBarry Smith  same but now you can use for example -redundant_ksp_gmres.
169*7f296bb3SBarry Smith  PCRedundantGetPC() is now changed to PCRedundantGetKSP()
170*7f296bb3SBarry Smith- The header "petscmg.h" is renamed to "petscpcmg.h", "petscasa.h"
171*7f296bb3SBarry Smith  is renamed to "petscpcasa.h".
172*7f296bb3SBarry Smith- The preconditioner PCBFBT has been removed. The same functionality
173*7f296bb3SBarry Smith  is available in PCFIELDSPLIT.
174*7f296bb3SBarry Smith- PCOPENMP is now PCHMPI and its prefix is now -hmpi\_ for
175*7f296bb3SBarry Smith  heirarchical MPI
176*7f296bb3SBarry Smith- PCMGSetGalerkin() has a second argument of type PetscBool.
177*7f296bb3SBarry Smith
178*7f296bb3SBarry Smith```{rubric} KSP:
179*7f296bb3SBarry Smith```
180*7f296bb3SBarry Smith
181*7f296bb3SBarry Smith- KSPSetPreconditionerSide() changed to KSPSetPCSide() to match name
182*7f296bb3SBarry Smith  of second argument
183*7f296bb3SBarry Smith- -ksp_right_pc -ksp_left_pc changed to -ksp_pc_side
184*7f296bb3SBarry Smith  left,right,symmetric to match KSPSetPCSide()
185*7f296bb3SBarry Smith- Added KSPGMRESGetRestart() and KSPGMRESGetCGSRefinementType()
186*7f296bb3SBarry Smith- Added KSPGMRESGetOrthogonalization()
187*7f296bb3SBarry Smith- KSPAddOptionsChecker() is replaced with
188*7f296bb3SBarry Smith  PetscObjectAddOptionsHandler()
189*7f296bb3SBarry Smith- Added KSPSPECEST which estimates the spectrum on the first solve
190*7f296bb3SBarry Smith  and uses it to configure a reduction-free method for subsequent
191*7f296bb3SBarry Smith  solves, intended for use when reductions are expensive such as
192*7f296bb3SBarry Smith  levels of multigrid.
193*7f296bb3SBarry Smith
194*7f296bb3SBarry Smith```{rubric} SNES:
195*7f296bb3SBarry Smith```
196*7f296bb3SBarry Smith
197*7f296bb3SBarry Smith- Added SNESLineSearchSetMonitor() and -snes_ls_monitor.
198*7f296bb3SBarry Smith- Add SNESKSPONLY, for solving linear problems with SNES.
199*7f296bb3SBarry Smith- Added the minlambda argument to SNESLineSearchGetParams() and
200*7f296bb3SBarry Smith  SNESLineSearchSetParams().
201*7f296bb3SBarry Smith
202*7f296bb3SBarry Smith```{rubric} TS:
203*7f296bb3SBarry Smith```
204*7f296bb3SBarry Smith
205*7f296bb3SBarry Smith- Rename TSCRANK_NICHOLSON to TSCN and TSRUNGE_KUTTA to TSRK for
206*7f296bb3SBarry Smith  consistency.
207*7f296bb3SBarry Smith- TSSetIFunction() and TSSetRHSFunction() have an additional
208*7f296bb3SBarry Smith  argument for the vector to compute the function value in. If
209*7f296bb3SBarry Smith  PETSC_NULL is used, then one is created by the TS.
210*7f296bb3SBarry Smith- TSSetMatrices() has been removed, use TSSetIFunction() and
211*7f296bb3SBarry Smith  TSSetRHSFunction(), perhaps providing Jacobian matrices and
212*7f296bb3SBarry Smith  TSComputeRHSFunctionLinear() and/or
213*7f296bb3SBarry Smith  TSComputeRHSJacobianConstant(). See
214*7f296bb3SBarry Smith  src/ts/examples/tutorials/ex{2,4,5,6}.c for an example.
215*7f296bb3SBarry Smith- Added TSARKIMEX: additive Runge-Kutta implicit-explicit methods
216*7f296bb3SBarry Smith  for multi-rate systems.
217*7f296bb3SBarry Smith- Changed TSStep() interface to only perform one step, added
218*7f296bb3SBarry Smith  TSSolve() to perform multiple steps with callbacks and monitors if
219*7f296bb3SBarry Smith  desired.
220*7f296bb3SBarry Smith- Added TSSetExactFinalTime(), replaces
221*7f296bb3SBarry Smith  TSSundialsSetExactFinalTime().
222*7f296bb3SBarry Smith
223*7f296bb3SBarry Smith```{rubric} DM/DA:
224*7f296bb3SBarry Smith```
225*7f296bb3SBarry Smith
226*7f296bb3SBarry Smith- Change array argument of DAGetArray and related functions from
227*7f296bb3SBarry Smith  void\*\* to void\* to avoid the need for an explicit cast (the
228*7f296bb3SBarry Smith  argument still has the meaning of a pointer to d-dimensionally
229*7f296bb3SBarry Smith  indexed array of user-defined node type, old code will still
230*7f296bb3SBarry Smith  compile correctly but the cast is no longer necessary).
231*7f296bb3SBarry Smith- DAGetCoordinates(), DAGetGhostedCoordinates(), and
232*7f296bb3SBarry Smith  DAGetCoordinateDA() now return borrowed references. The returned
233*7f296bb3SBarry Smith  object should not be destroyed by the user.
234*7f296bb3SBarry Smith- Added DAVecGetArrayF90()
235*7f296bb3SBarry Smith- Changed DASetVertexDivision to DASetOwnershipRanges
236*7f296bb3SBarry Smith- The SDA object and all its method have been removed
237*7f296bb3SBarry Smith- The DA, ADDA, Slice and DMComposite objects are now all
238*7f296bb3SBarry Smith  represented by a DM object.
239*7f296bb3SBarry Smith- Routines that began with ADDA and Slice now begin with DMADDA and
240*7f296bb3SBarry Smith  DMSlice
241*7f296bb3SBarry Smith- DA/ADDA/Slice/DMCompositeGetMatrix() -> DMGetMatrix(), similar for
242*7f296bb3SBarry Smith  all other routines that have a DM version
243*7f296bb3SBarry Smith- Removed DASetType(), DARegister() etc since they will all be
244*7f296bb3SBarry Smith  handled via DMSetType() etc
245*7f296bb3SBarry Smith- Added DMSetUp() that is called, for example, after all the
246*7f296bb3SBarry Smith  parameters are passed to the DM object to actually construct the
247*7f296bb3SBarry Smith  data structures; replace all calls to DASetType() with calls to
248*7f296bb3SBarry Smith  DMSetUp()
249*7f296bb3SBarry Smith- DAXXX() routines are now either DMXXX() or DMDAXXX() see
250*7f296bb3SBarry Smith  petscdmda.h for details
251*7f296bb3SBarry Smith- The operation DALocalToGlobal() which performed no communication
252*7f296bb3SBarry Smith  can now be performed with DMLocalToGlobalBegin/End() with
253*7f296bb3SBarry Smith  INSERT_VALUES.
254*7f296bb3SBarry Smith- petscda.h, petscdadef.h and petscda.h90 are now petscdmda.h,
255*7f296bb3SBarry Smith  petscdmdadef.h, and petscdmda.h90
256*7f296bb3SBarry Smith- DAGetISLocalToGlobalMapping() and
257*7f296bb3SBarry Smith  DAGetISLocalToGlobalMappingBlck() are now
258*7f296bb3SBarry Smith  DMGetLocalToGlobalMapping() and DMGetLocalToGlobalMappingBlock()
259*7f296bb3SBarry Smith  and are collective since they may be constructed lazily.
260*7f296bb3SBarry Smith- DMGetBlockSize() is added.
261*7f296bb3SBarry Smith- Changed DMDAPeriodicType to DMDABoundaryType, and changed this
262*7f296bb3SBarry Smith  enum to only specify one boundary (one for each dimension). This
263*7f296bb3SBarry Smith  enum is now one of DMDA_BOUNDARY_NONE, DMDA_BOUNDARY_GHOSTED, or
264*7f296bb3SBarry Smith  DMDA_BOUNDARY_PERIODIC. See DMDABoundaryType man page for more.
265*7f296bb3SBarry Smith- DMDASetPeriodicity() is now DMDASetBoundaryType(), and API is
266*7f296bb3SBarry Smith  changed to take three DMDABoundaryType arguments.
267*7f296bb3SBarry Smith- Changed API for DMDACreate\*D(), DMDAGetInfo() to take the correct
268*7f296bb3SBarry Smith  number of DMDABoundaryType enums for the dimension.
269*7f296bb3SBarry Smith- DMDASetGhostedCoordinates() is added to set coordinates of
270*7f296bb3SBarry Smith  non-periodic ghost cells.
271*7f296bb3SBarry Smith
272*7f296bb3SBarry Smith```{rubric} DMMG:
273*7f296bb3SBarry Smith```
274*7f296bb3SBarry Smith
275*7f296bb3SBarry Smith```{rubric} PetscViewer:
276*7f296bb3SBarry Smith```
277*7f296bb3SBarry Smith
278*7f296bb3SBarry Smith- PETSC_VIEWER_XXX is now PETSCVIEWERXXX
279*7f296bb3SBarry Smith- Added PetscViewerASCIIOpenWithFILE() and PetscViewerASCIISetFILE()
280*7f296bb3SBarry Smith- Added PetscViewerASCIISynchronizedAllow() which must be called
281*7f296bb3SBarry Smith  before using PetscViewerASCIISynchronizedPrintf()
282*7f296bb3SBarry Smith
283*7f296bb3SBarry Smith```{rubric} SYS:
284*7f296bb3SBarry Smith```
285*7f296bb3SBarry Smith
286*7f296bb3SBarry Smith- PetscOptionsAtoi(),PetscOptionsAtod(),PetscOptionsAtol() ->
287*7f296bb3SBarry Smith  PetscOptionsStringToInt(), PetscOptionsStringToReal(),
288*7f296bb3SBarry Smith  PetscOptionsStringToBool()
289*7f296bb3SBarry Smith- PetscFListFind() takes an additional argument to look up the
290*7f296bb3SBarry Smith  symbol in dynamically loaded libraries if not already in the list.
291*7f296bb3SBarry Smith- Added PetscBagSetOptionsPrefix(), which allows a prefix for the
292*7f296bb3SBarry Smith  option names of bag items.
293*7f296bb3SBarry Smith- The preloading macros as well as developer-level logging and
294*7f296bb3SBarry Smith  profiling functions have been namespaced, e.g. PreLoadBegin() is
295*7f296bb3SBarry Smith  now PetscPreLoadBegin().
296*7f296bb3SBarry Smith
297*7f296bb3SBarry Smith```{rubric} AO:
298*7f296bb3SBarry Smith```
299*7f296bb3SBarry Smith
300*7f296bb3SBarry Smith```{rubric} Sieve:
301*7f296bb3SBarry Smith```
302*7f296bb3SBarry Smith
303*7f296bb3SBarry Smith```{rubric} Fortran:
304*7f296bb3SBarry Smith```
305*7f296bb3SBarry Smith
306*7f296bb3SBarry Smith```{rubric} ExternalPackages:
307*7f296bb3SBarry Smith```
308