Commits

Vijay Mahadevan committed b3fc930 Merge

Merge remote-tracking branch 'origin/master' into feature-dmmoab

  • Participants
  • Parent commits b2533dd, 49fcfd5

Comments (0)

Files changed (575)

bin/maint/asterix-test.sh

-#!/bin/sh
-set -x
-
-# basic gcc tests
-./config/examples/asterix/asterix64.py
-make PETSC_ARCH=asterix64 all alltests tests_DATAFILESPATH DATAFILESPATH=/home/balay/datafiles
-./config/configure.py  CC=gcc FC=gfortran CXX=g++ PETSC_ARCH=asterix64-cxx --with-clanguage=cxx \
---download-mpich=1 --download-boost=1 --download-chaco=1 \
---download-plapack=1 --download-tetgen=1 --download-triangle=1 --download-hdf5=1
-make PETSC_ARCH=asterix64-cxx all alltests tests_DATAFILESPATH DATAFILESPATH=/home/balay/datafiles
-./config/examples/asterix/asterix64-openmpi.py
-make PETSC_ARCH=asterix64-openmpi all alltests tests_DATAFILESPATH DATAFILESPATH=/home/balay/datafiles
-./config/examples/asterix/asterix64.py --with-clanguage=cxx -PETSC_ARCH=asterix64-cxx-opt --with-debugging=0 --with-log=0
-make PETSC_ARCH=asterix64-cxx-opt all alltests tests_DATAFILESPATH DATAFILESPATH=/home/balay/datafiles
-./config/examples/asterix/asterix64.py --with-scalar-type=complex --with-clanguage=cxx -PETSC_ARCH=asterix64-complex
-make PETSC_ARCH=asterix64-complex all test alltests tests_DATAFILESPATH DATAFILESPATH=/home/balay/datafiles
-
-./config/examples/asterix/asterix64.py --download-prometheus=1 --download-parmetis=1 -PETSC_ARCH=asterix64-prometheus \
---download-umfpack=1
-make PETSC_ARCH=asterix64-prometheus all alltests tests_DATAFILESPATH DATAFILESPATH=/home/balay/datafiles
-
-#c89
-./config/examples/asterix/asterix64-c89.py
-make PETSC_ARCH=asterix64-c89 all test alltests tests_DATAFILESPATH DATAFILESPATH=/home/balay/datafiles
-
-# basic sun tests
-./config/examples/asterix/asterix64-sun.py
-make PETSC_ARCH=asterix64-sun all test
-./config/examples/asterix/asterix64-sun.py --with-shared-libraries=1 -PETSC_ARCH=asterix64-sun-dynamic
-make PETSC_ARCH=asterix64-sun-dynamic all alltests tests_DATAFILESPATH DATAFILESPATH=/home/balay/datafiles
-./config/examples/asterix/asterix64-sun.py --with-clanguage=cxx -PETSC_ARCH=asterix64-sun-cxx  --with-debugging=0 --with-pic=0 \
---download-f-blaslapack=1 --download-spooles=1 --download-superlu=1 \
---download-superlu_dist=1 --download-hypre=1 --download-spai=1 --download-scalapack=1 \
---download-mumps=1 --download-mpe=1 --download-sundials=1
-make PETSC_ARCH=asterix64-sun-cxx all
-make PETSC_ARCH=asterix64-sun-cxx CLINKER=sun-cc shared
-make PETSC_ARCH=asterix64-sun-cxx test
-./config/examples/asterix/asterix64-sun.py --with-shared-libraries=1 --with-scalar-type=complex --with-clanguage=cxx -PETSC_ARCH=asterix64-sun-complex-dynamic
-make PETSC_ARCH=asterix64-sun-complex-dynamic all
-make PETSC_ARCH=asterix64-sun-complex-dynamic CLINKER=sun-cc shared
-make PETSC_ARCH=asterix64-sun-complex-dynamic test
-

bin/maint/confignightly/churn2

 set MACH=churn
 set USR=petsc
 set LOC=/sandbox/petsc/${RNAME}-2
-set CONF=arch-linux-cxx
+set CONF=arch-linux-cxx-cmplx-pkgs-64idx

bin/maint/confignightly/crank2

 set MACH=crank
 set USR=petsc
 set LOC=/sandbox/petsc/${RNAME}-2
-set CONF=arch-linux-gcc-ifc
+set CONF=arch-linux-gcc-ifc-cmplx

bin/maint/confignightly/imav

+#! /bin/csh
+
+set MACH=imav
+set USR=petsc
+set LOC=/Users/petsc/${RNAME}
+set CONF=arch-osx-cxx-cmplx-pkgs-64idx

bin/maint/confignightly/petsc-mini

 #! /bin/csh
 
-set MACH=petsc-mini.mcs.anl.gov
+set MACH=petsc-mini
 set USR=petsc
 set LOC=/Users/petsc/${RNAME}
 set CONF=arch-osx-10.6

bin/maint/confignightly/petsc-mini2

 #! /bin/csh
 
-set MACH=petsc-mini.mcs.anl.gov
+set MACH=petsc-mini
 set USR=petsc
 set LOC=/Users/petsc/${RNAME}-2
 set CONF=arch-osx-10.6-cxx-pkgs-opt

bin/maint/confignightly/petsc-mini3

 #! /bin/csh
 
-set MACH=petsc-mini.mcs.anl.gov
+set MACH=petsc-mini
 set USR=petsc
 set LOC=/Users/petsc/${RNAME}-3
 set CONF=arch-osx-10.6-cxx-cmplx-pkgs-dbg

bin/maint/confignightly/petsc-mini4

+#! /bin/csh
+
+set MACH=petsc-mini
+set USR=petsc
+set LOC=/Users/petsc/${RNAME}-4
+set CONF=arch-osx-pgi-pkgs-opt

bin/maint/generatefortranstubs.py

   data = re.subn('\nvoid ','\nPETSC_EXTERN void PETSC_STDCALL ',data)[0]
   data = re.subn('\nPetscErrorCode ','\nPETSC_EXTERN void PETSC_STDCALL ',data)[0]
   data = re.subn('Petsc([ToRm]*)Pointer\(int\)','Petsc\\1Pointer(void*)',data)[0]	
-  data = re.subn('PetscToPointer\(a\) \(a\)','PetscToPointer(a) (*(long *)(a))',data)[0]
-  data = re.subn('PetscFromPointer\(a\) \(int\)\(a\)','PetscFromPointer(a) (long)(a)',data)[0]
+  data = re.subn('PetscToPointer\(a\) \(a\)','PetscToPointer(a) (*(PetscFortranAddr *)(a))',data)[0]
+  data = re.subn('PetscFromPointer\(a\) \(int\)\(a\)','PetscFromPointer(a) (PetscFortranAddr)(a)',data)[0]
   data = re.subn('PetscToPointer\( \*\(int\*\)','PetscToPointer(',data)[0]
   data = re.subn('MPI_Comm comm','MPI_Comm *comm',data)[0]
   data = re.subn('\(MPI_Comm\)PetscToPointer\( \(comm\) \)','MPI_Comm_f2c(*(MPI_Fint*)(comm))',data)[0]

bin/maint/package-test.sh

-#!/bin/sh
-set -x
-ECHO=
-
-OPT1='--with-shared-libraries=1 --with-debugging=0'
-OPT2='--with-clanguage=cxx --with-log=0'
-OPT3='--with-scalar-type=complex --with-clanguage=cxx --with-pic=0 --with-log=0'
-
-DATAFILESPATH=/home/petsc/datafiles
-
-PACKAGES='--download-mpich=1 --download-plapack=1
---download-parmetis=1 --download-triangle=1
---download-spooles=1 --download-superlu=1 --download-superlu_dist=1
---download-scalapack=1 --download-mumps=1
---download-mpe=1 --download-fftw'
-
-PKG1='--download-spai=1 --download-chaco=1 --download-sundials=1 --download-umfpack=1
---download-hypre=1 --download-prometheus=1 --download-hdf5=1 '
-
-PKG2='--download-boost=1  --download-tetgen=1'
-
-PKG3=''
-
-# missing package tests:
-# party - ?
-# scotch - binary?
-# cblas/fblas ??
-
-GNUCOMP='CC=gcc FC=gfortran CXX=g++'
-INTELCOMP='CC=icc FC=ifort CXX=icpc'
-SUNCMP='CC=sun-cc FC=sun-f90 CXX=sun-CC'
-
-BUILD='all test testexamples testfortran'
-
-
-# Gnu compilers
-${ECHO} ./config/configure.py PETSC_ARCH=package-gnu-opt1 ${BASIC} ${PACKAGES} ${PKG1} ${OPT1} ${GNUCOMP}
-${ECHO} make PETSC_ARCH=package-gnu-opt1 ${BUILD}
-
-${ECHO} ./config/configure.py PETSC_ARCH=package-gnu-opt2 ${BASIC} ${PACKAGES} ${PKG2} ${OPT2} ${GNUCOMP}
-${ECHO} make PETSC_ARCH=package-gnu-opt2 ${BUILD}
-
-${ECHO} ./config/configure.py PETSC_ARCH=package-gnu-opt3 ${BASIC} ${PACKAGES} ${PKG3} ${OPT3} ${GNUCOMP}
-${ECHO} make PETSC_ARCH=package-gnu-opt3 ${BUILD}
-
-# Intel compilers
-${ECHO} ./config/configure.py PETSC_ARCH=package-intel-opt1 ${BASIC} ${PACKAGES} ${PKG1} ${OPT1} ${INTELCOMP}
-${ECHO} make PETSC_ARCH=package-intel-opt1 ${BUILD}
-
-${ECHO} ./config/configure.py PETSC_ARCH=package-intel-opt2 ${BASIC} ${PACKAGES} ${PKG2} ${OPT2} ${INTELCOMP}
-${ECHO} make PETSC_ARCH=package-intel-opt2 ${BUILD}
-
-${ECHO} ./config/configure.py PETSC_ARCH=package-intel-opt3 ${BASIC} ${PACKAGES} ${PKG3} ${OPT3} ${INTELCOMP}
-${ECHO} make PETSC_ARCH=package-intel-opt3 ${BUILD}
-
-# Sun compilers
-${ECHO} ./config/configure.py PETSC_ARCH=package-sun-opt1 ${BASIC} ${PACKAGES} ${PKG1} ${OPT1} ${SUNCOMP}
-${ECHO} make PETSC_ARCH=package-sun-opt1 ${BUILD}
-
-${ECHO} ./config/configure.py PETSC_ARCH=package-sun-opt2 ${BASIC} ${PACKAGES} ${PKG2} ${OPT2} ${SUNCOMP}
-${ECHO} make PETSC_ARCH=package-sun-opt2 ${BUILD}
-
-${ECHO} ./config/configure.py PETSC_ARCH=package-sun-opt3 ${BASIC} ${PACKAGES} ${PKG3} ${OPT3} ${SUNCOMP}
-${ECHO} make PETSC_ARCH=package-sun-opt3 ${BUILD}

bin/maint/parth-test.sh

-#!/bin/sh
-set -x
-
-# basic cygwin-ms test
-./config/cygwin-ms.py --with-clanguage=cxx --with-debugging=0 PETSC_ARCH=cygwin-ms-cxx
-make PETSC_ARCH=cygwin-ms-cxx all alltests tests_DATAFILESPATH DATAFILESPATH=/home/balay/datafiles 
-
-# basic cygwin-borland test
-./config/cygwin-borland.py
-make PETSC_ARCH=cygwin-borland all test
-
-# basic cygwin gnu test
-./config/cygwin.py
-make PETSC_ARCH=cygwin all test
-
-# other cygwin-ms tests
-./config/cygwin-ms.py
-make PETSC_ARCH=cygwin-ms all alltests tests_DATAFILESPATH DATAFILESPATH=/home/balay/datafiles 
-
-./config/cygwin-ms.py --with-clanguage=cxx --with-scalar-type=complex --with-debugging=0 PETSC_ARCH=cygwin-ms-cxx-complex
-make PETSC_ARCH=cygwin-ms-cxx-complex  all alltests DATAFILESPATH=/home/balay/datafiles 
-

bin/pythonscripts/PetscGenerateFEMQuadrature.py

-#!/usr/bin/env python
-import os, sys
-
-# Find PETSc/BuildSystem
-if 'PETSC_DIR' in os.environ:
-  configDir = os.path.join(os.environ['PETSC_DIR'], 'config')
-  bsDir     = os.path.join(configDir, 'BuildSystem')
-  fiatDir   = os.path.join(os.environ['PETSC_DIR'],os.environ['PETSC_ARCH'],'lib', 'python'+'.'.join(map(str, sys.version_info[0:2])), 'site-packages')
-  sys.path.insert(0, bsDir)
-  sys.path.insert(0, configDir)
-  if os.path.isdir(os.path.join(fiatDir,'FIAT')):
-    sys.path.insert(0, fiatDir)
-
-import PETSc.FEM
-from FIAT.reference_element import default_simplex
-from FIAT.lagrange import Lagrange
-from FIAT.discontinuous_lagrange import DiscontinuousLagrange
-
-generator  = PETSc.FEM.QuadratureGenerator()
-generator.setup()
-elements   = []
-bdElements = []
-if not (len(sys.argv)-2) % 5 == 0:
-  sys.exit('Incomplete set of arguments')
-for n in range((len(sys.argv)-2) / 5):
-  dim        = int(sys.argv[n*5+1])
-  order      = int(sys.argv[n*5+2])
-  components = int(sys.argv[n*5+3])
-  numBlocks  = int(sys.argv[n*5+4])
-  operator   = sys.argv[n*5+5]
-  if operator == 'boundary':
-    if order == 0:
-      element  = DiscontinuousLagrange(default_simplex(dim-1), order)
-    else:
-      element  = Lagrange(default_simplex(dim-1), order)
-    element.numComponents = components
-    bdElements.append(element)
-  else:
-    if order == 0:
-      element  = DiscontinuousLagrange(default_simplex(dim), order)
-    else:
-      element  = Lagrange(default_simplex(dim), order)
-    element.numComponents = components
-    elements.append(element)
-filename = sys.argv[-1]
-generator.quadDegree = max([e.order for e in elements])
-generator.run(elements, bdElements, numBlocks, operator, filename)

bin/pythonscripts/PetscGenerateFEMQuadratureTensorProduct.py

-#!/usr/bin/env python
-import os, sys
-
-# Find PETSc/BuildSystem
-if 'PETSC_DIR' in os.environ:
-  configDir = os.path.join(os.environ['PETSC_DIR'], 'config')
-  bsDir     = os.path.join(configDir, 'BuildSystem')
-  fiatDir   = os.path.join(os.environ['PETSC_DIR'],os.environ['PETSC_ARCH'],'lib', 'python'+'.'.join(map(str, sys.version_info[0:2])), 'site-packages')
-  sys.path.insert(0, bsDir)
-  sys.path.insert(0, configDir)
-  if os.path.isdir(os.path.join(fiatDir,'FIAT')):
-    sys.path.insert(0, fiatDir)
-
-import PETSc.FEM
-from FIAT.reference_element import default_simplex
-from FIAT.lagrange import Lagrange
-from FIAT.discontinuous_lagrange import DiscontinuousLagrange
-
-generator  = PETSc.FEM.QuadratureGenerator()
-generator.setup()
-elements   = []
-if not (len(sys.argv)-2) % 5 == 0:
-  sys.exit('Incomplete set of arguments')
-for n in range((len(sys.argv)-2) / 5):
-  dim        = int(sys.argv[n*5+1])
-  order      = int(sys.argv[n*5+2])
-  components = int(sys.argv[n*5+3])
-  numBlocks  = int(sys.argv[n*5+4])
-  operator   = sys.argv[n*5+5]
-  if order == 0:
-    element  = DiscontinuousLagrange(default_simplex(1), order)
-  else:
-    element  = Lagrange(default_simplex(1), order)
-  element.numComponents = components
-  elements.append(element)
-filename = sys.argv[-1]
-generator.quadDegree = max([e.order+1 for e in elements])
-generator.runTensorProduct(dim, elements, None, numBlocks, operator, filename)

bin/pythonscripts/petsc_gen_xdmf.py

+#!/usr/bin/env python
+import h5py
+import numpy as np
+import os, sys
+
+class Xdmf:
+  def __init__(self, filename):
+    self.filename = filename
+    self.cellMap  = {1 : {1 : 'Polyvertex', 2 : 'Polyline'}, 2 : {3 : 'Triangle', 4 : 'Quadrilateral'}, 3 : {4 : 'Tetrahedron', 8 : 'Hexahedron'}}
+    self.typeMap  = {'scalar' : 'Scalar', 'vector' : 'Vector', 'tensor' : 'Tensor6', 'matrix' : 'Matrix'}
+    self.typeExt  = {2 : {'vector' : ['x', 'y'], 'tensor' : ['xx', 'yy', 'xy']}, 3 : {'vector' : ['x', 'y', 'z'], 'tensor' : ['xx', 'yy', 'zz', 'xy', 'yz', 'xz']}}
+    return
+
+  def writeHeader(self, fp, hdfFilename):
+    fp.write('''\
+<?xml version="1.0" ?>
+<!DOCTYPE Xdmf SYSTEM "Xdmf.dtd" [
+<!ENTITY HeavyData "%s">
+]>
+''' % os.path.basename(hdfFilename))
+    fp.write('\n<Xdmf>\n  <Domain Name="domain">\n')
+    return
+
+  def writeCells(self, fp, topologyPath, numCells, numCorners):
+    fp.write('''\
+    <DataItem Name="cells"
+	      ItemType="Uniform"
+	      Format="HDF"
+	      NumberType="Float" Precision="8"
+	      Dimensions="%d %d">
+      &HeavyData;:/%s/cells
+    </DataItem>
+''' % (numCells, numCorners, topologyPath))
+    return
+
+  def writeVertices(self, fp, geometryPath, numVertices, spaceDim):
+    fp.write('''\
+    <DataItem Name="vertices"
+	      Format="HDF"
+	      Dimensions="%d %d">
+      &HeavyData;:/%s/vertices
+    </DataItem>
+    <!-- ============================================================ -->
+''' % (numVertices, spaceDim, geometryPath))
+    return
+
+  def writeTimeGridHeader(self, fp, time):
+    fp.write('''\
+    <Grid Name="TimeSeries" GridType="Collection" CollectionType="Temporal">
+      <Time TimeType="List">
+        <DataItem Format="XML" NumberType="Float" Dimensions="%d">
+          ''' % (len(time)))
+    fp.write(' '.join(map(str, map(int, time))))
+    fp.write('''
+        </DataItem>
+      </Time>
+''')
+    return
+
+  def writeSpaceGridHeader(self, fp, numCells, numCorners, cellDim, spaceDim):
+    fp.write('''\
+      <Grid Name="domain" GridType="Uniform">
+	<Topology
+	   TopologyType="%s"
+	   NumberOfElements="%d">
+	  <DataItem Reference="XML">
+	    /Xdmf/Domain/DataItem[@Name="cells"]
+	  </DataItem>
+	</Topology>
+	<Geometry GeometryType="%s">
+	  <DataItem Reference="XML">
+	    /Xdmf/Domain/DataItem[@Name="vertices"]
+	  </DataItem>
+	</Geometry>
+''' % (self.cellMap[cellDim][numCorners], numCells, "XYZ" if spaceDim > 2 else "XY"))
+    return
+
+  def writeFieldSingle(self, fp, numSteps, timestep, spaceDim, name, f, domain):
+    if len(f[1].shape) > 2:
+      dof = f[1].shape[1]
+      bs  = f[1].shape[2]
+    else:
+      dof = f[1].shape[0]
+      bs  = f[1].shape[1]
+    fp.write('''\
+	<Attribute
+	   Name="%s"
+	   Type="%s"
+	   Center="%s">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 %d %d"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              %d 0 0
+              1 1 1
+              1 %d %d
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="%d %d %d"
+	       Format="HDF">
+	      &HeavyData;:%s
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+''' % (f[0], self.typeMap[f[1].attrs['vector_field_type']], domain, dof, bs, timestep, dof, bs, numSteps, dof, bs, name))
+    return
+
+  def writeFieldComponents(self, fp, numSteps, timestep, spaceDim, name, f, domain):
+    vtype = f[1].attrs['vector_field_type']
+    if len(f[1].shape) > 2:
+      dof = f[1].shape[1]
+      bs  = f[1].shape[2]
+    else:
+      dof = f[1].shape[0]
+      bs  = f[1].shape[1]
+    for c in range(bs):
+      ext = self.typeExt[spaceDim][vtype][c]
+      fp.write('''\
+	<Attribute
+	   Name="%s"
+	   Type="Scalar"
+	   Center="%s">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 %d 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              %d 0 %d
+              1 1 1
+              1 %d 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="%d %d %d"
+	       Format="HDF">
+	      &HeavyData;:%s
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+''' % (f[0]+'_'+ext, domain, dof, timestep, c, dof, numSteps, dof, bs, name))
+    return
+
+  def writeField(self, fp, numSteps, timestep, cellDim, spaceDim, name, f, domain):
+    ctypes = ['tensor', 'matrix']
+    if spaceDim == 2 or cellDim != spaceDim: ctypes.append('vector')
+    if f[1].attrs['vector_field_type'] in ctypes:
+      self.writeFieldComponents(fp, numSteps, timestep, spaceDim, name, f, domain)
+    else:
+      self.writeFieldSingle(fp, numSteps, timestep, spaceDim, name, f, domain)
+    return
+
+  def writeSpaceGridFooter(self, fp):
+    fp.write('      </Grid>\n')
+    return
+
+  def writeTimeGridFooter(self, fp):
+    fp.write('    </Grid>\n')
+    return
+
+  def writeFooter(self, fp):
+    fp.write('  </Domain>\n</Xdmf>\n')
+    return
+
+  def write(self, hdfFilename, topologyPath, numCells, numCorners, cellDim, geometryPath, numVertices, spaceDim, time, vfields, cfields):
+    useTime = not (len(time) < 2 and time[0] == -1)
+    with file(self.filename, 'w') as fp:
+      self.writeHeader(fp, hdfFilename)
+      self.writeCells(fp, topologyPath, numCells, numCorners)
+      self.writeVertices(fp, geometryPath, numVertices, spaceDim)
+      if useTime: self.writeTimeGridHeader(fp, time)
+      for t in range(len(time)):
+        self.writeSpaceGridHeader(fp, numCells, numCorners, cellDim, spaceDim)
+        for vf in vfields: self.writeField(fp, len(time), t, cellDim, spaceDim, '/vertex_fields/'+vf[0], vf, 'Node')
+        for cf in cfields: self.writeField(fp, len(time), t, cellDim, spaceDim, '/cell_fields/'+cf[0], cf, 'Cell')
+        self.writeSpaceGridFooter(fp)
+      if useTime: self.writeTimeGridFooter(fp)
+      self.writeFooter(fp)
+    return
+
+def generateXdmf(hdfFilename, xdmfFilename = None):
+  if xdmfFilename is None:
+    xdmfFilename = os.path.splitext(hdfFilename)[0] + '.xmf'
+  # Read mesh
+  h5          = h5py.File(hdfFilename, 'r')
+  if 'viz' in h5 and 'geometry' in h5['viz']:
+    geomPath  = 'viz/geometry'
+    geom      = h5['viz']['geometry']
+  else:
+    geomPath  = 'geometry'
+    geom      = h5['geometry']
+  if 'viz' in h5 and 'topology' in h5['viz']:
+    topoPath  = 'viz/topology'
+    topo      = h5['viz']['topology']
+  else:
+    topoPath  = 'topology'
+    topo      = h5['topology']
+  vertices    = geom['vertices']
+  numVertices = vertices.shape[0]
+  spaceDim    = vertices.shape[1]
+  cells       = topo['cells']
+  numCells    = cells.shape[0]
+  numCorners  = cells.shape[1]
+  cellDim     = topo['cells'].attrs['cell_dim']
+  time        = np.array(h5['time']).flatten()
+  vfields     = []
+  cfields     = []
+  if 'vertex_fields' in h5: vfields = h5['vertex_fields'].items()
+  if 'cell_fields' in h5: cfields = h5['cell_fields'].items()
+
+  # Write Xdmf
+  Xdmf(xdmfFilename).write(hdfFilename, topoPath, numCells, numCorners, cellDim, geomPath, numVertices, spaceDim, time, vfields, cfields)
+  h5.close()
+  return
+
+if __name__ == '__main__':
+  generateXdmf(sys.argv[1])
 testexamples_HDF5: ${TESTEXAMPLES_HDF5}
 testexamples_CHACO: ${TESTEXAMPLES_CHACO}
 testexamples_TRIANGLE: ${TESTEXAMPLES_TRIANGLE}
+testexamples_SSL: ${TESTEXAMPLES_SSL}
 
 testexamples_BOOST: ${TESTEXAMPLES_BOOST}
 testexamples_TETGEN: ${TESTEXAMPLES_TETGEN}
 alltests:
 	-@${RM} ${PETSC_ARCH}/conf/alltests.log alltests.log
 	-@ln -s ${PETSC_ARCH}/conf/alltests.log alltests.log
+	-@if [ "${PETSC_WITH_BATCH}" == "" ]; then make PETSC_ARCH=${PETSC_ARCH} PETSC_DIR=${PETSC_DIR} stream NPMAX=4 | tee ${PETSC_ARCH}/conf/alltests.log ;fi
 	-@${OMAKE} alltest PETSC_ARCH=${PETSC_ARCH} PETSC_DIR=${PETSC_DIR} MPIEXEC="${MPIEXEC}" DATAFILESPATH=${DATAFILESPATH} 2>&1 | tee ${PETSC_ARCH}/conf/alltests.log
 
 alltest:

config/BuildSystem/config/base.py

             break
         if found: break
     if not found:
-      for d in self.framework.argDB['search-dirs']:
+      dirs = self.framework.argDB['search-dirs']
+      if not isinstance(dirs, list): dirs = [dirs]
+      for d in dirs:
         for name in names:
           name, options, varName = getNames(name, resultName)
           if self.checkExecutable(d, name):

config/BuildSystem/config/compilers.py

         # Check for '-rpath /sharedlibpath/ or -R /sharedlibpath/'
         if arg == '-rpath' or arg == '-R':
           lib = argIter.next()
+          if lib.startswith('-'): continue # perhaps the path was striped due to quotes?
           if lib.startswith('"') and lib.endswith('"') and lib.find(' ') == -1: lib = lib[1:-1]
           lib = os.path.abspath(lib)
           if lib in ['/usr/lib','/lib','/usr/lib64','/lib64']: continue
         # Check for '-rpath /sharedlibpath/ or -R /sharedlibpath/'
         if arg == '-rpath' or arg == '-R':
           lib = argIter.next()
+          if lib.startswith('-'): continue # perhaps the path was striped due to quotes?
           if lib.startswith('"') and lib.endswith('"') and lib.find(' ') == -1: lib = lib[1:-1]
           lib = os.path.abspath(lib)
           if lib in ['/usr/lib','/lib','/usr/lib64','/lib64']: continue
         if arg == '-rpath' or arg == '-R':
           lib = argIter.next()
           if lib == '\\': lib = argIter.next()
+          if lib.startswith('-'): continue # perhaps the path was striped due to quotes?
           if lib.startswith('"') and lib.endswith('"') and lib.find(' ') == -1: lib = lib[1:-1]
           lib = os.path.abspath(lib)
           if lib in ['/usr/lib','/lib','/usr/lib64','/lib64']: continue

config/BuildSystem/config/libraries.py

     libs = newlibs
     newlibs = []
     for j in libs:
-      # do not remove duplicate -l, because there is a tiny chance that order may matter
+      # do not remove duplicate non-consecutive -l, because there is a tiny chance that order may matter
+      if newlibs and j == newlibs[-1]: continue
       if j in newlibs and not ( j.startswith('-l') or j == '-framework') : continue
       newlibs.append(j)
     return ' '.join(newlibs)

config/BuildSystem/config/packages/MPI.py

 
     oldFlags = self.compilers.CPPFLAGS # Disgusting save and restore
     self.compilers.CPPFLAGS += ' '+self.headers.toString(self.include)
-    if self.checkCompile('#include <mpi.h>', 'int combiner = MPI_COMBINER_DUP;'):
-      self.addDefine('HAVE_MPI_COMBINER_DUP',1)
+    for combiner in ['MPI_COMBINER_DUP', 'MPI_COMBINER_CONTIGUOUS']:
+      if self.checkCompile('#include <mpi.h>', 'int combiner = %s;' % (combiner,)):
+        self.addDefine('HAVE_' + combiner,1)
     self.compilers.CPPFLAGS = oldFlags
 
     if self.libraries.check(self.dlib, "MPIDI_CH3I_sock_set"):

config/BuildSystem/config/packages/__init__.py

-all = ['make','fblaslapack','f2cblaslapack','BlasLapack','exodusii', 'scientificpython', 'fiat', 'MOAB', 'MPI', 'netcdf', 'PETSc','boost', 'cusp', 'thrust', 'hdf5', 'netcdf-cxx']
+all = ['make','fblaslapack','f2cblaslapack','BlasLapack','exodusii', 'scientificpython', 'fiat', 'MOAB', 'MPI', 'netcdf', 'PETSc','boost', 'cusp', 'thrust', 'hdf5', 'netcdf-cxx', 'cgns']

config/BuildSystem/config/packages/cgns.py

+#!/usr/bin/env python
+import config.base
+import config.package
+import os
+
+class Configure(config.package.Package):
+  def __init__(self, framework):
+    config.package.Package.__init__(self, framework)
+    self.functions  = ['cg_close']
+    self.includes   = ['cgnslib.h']
+    self.liblist    = [['libcgns.a'],
+                       ['libcgns.a', 'libhdf5.a']] # Sometimes they over-link

config/BuildSystem/config/setCompilers.py

   def isIBM(compiler):
     '''Returns true if the compiler is a IBM compiler'''
     try:
-      (output, error, status) = config.base.Configure.executeShellCommand(compiler+' -flags')
+      (output, error, status) = config.base.Configure.executeShellCommand(compiler+' -qversion')
       output = output + error
-      #
-      # Do not know what to look for for IBM compilers
-      #
-      return 0
+      if 'IBM XL' in output:
+        return 1
     except RuntimeError:
       pass
     return 0
   def resetEnvCompilers(self):
     ignoreEnv = ['CC','CFLAGS','CXX','CXXFLAGS','FC','FCFLAGS','F77','FFLAGS',
                  'F90','F90FLAGS','CPP','CPPFLAGS','CXXCPP','CXXCPPFLAGS',
-                 'LDFLAGS','LIBS','MPI_DIR','RM']
+                 'LDFLAGS','LIBS','MPI_DIR','RM','MAKEFLAGS','AR']
     for envVal in ignoreEnv:
       if envVal in os.environ:
         self.logPrintBox('***** WARNING: '+envVal+' (set to '+os.environ[envVal]+') found in environment variables - ignoring \n use ./configure '+envVal+'=$'+envVal+' if you really want to use that value ******')

config/PETSc/Configure.py

       self.addDefine('UNUSED', ' ')
     self.popLanguage()
 
+  def configureIsatty(self):
+    '''Check if the Unix C function isatty() works correctly
+       Actually just assumes it does not work correctly on batch systems'''
+    if not self.framework.argDB['with-batch']:
+      self.addDefine('USE_ISATTY',1)
+
   def configureDeprecated(self):
     '''Check if __attribute((deprecated)) is supported'''
     self.pushLanguage(self.languages.clanguage)
     self.executeTest(self.configurePrefetch)
     self.executeTest(self.configureUnused)
     self.executeTest(self.configureDeprecated)
+    self.executeTest(self.configureIsatty)
     self.executeTest(self.configureExpect);
     self.executeTest(self.configureFunctionName);
     self.executeTest(self.configureIntptrt);

config/PETSc/packages/fftw.py

   def __init__(self, framework):
     PETSc.package.NewPackage.__init__(self, framework)
     # host locally as fftw.org url can expire after new release.
-    self.download  = ['http://ftp.mcs.anl.gov/pub/petsc/externalpackages/fftw-3.3.2.tar.gz','http://www.fftw.org/fftw-3.3.2.tar.gz']
+    self.download  = ['http://www.fftw.org/fftw-3.3.3.tar.gz',
+                      'http://ftp.mcs.anl.gov/pub/petsc/externalpackages/fftw-3.3.3.tar.gz']
     self.functions = ['fftw_malloc']
     self.includes  = ['fftw3-mpi.h']
     self.liblist   = [['libfftw3_mpi.a','libfftw3.a']]
-    self.complex   = 1
-    self.pkgname   = 'fftw3'
+    self.requires32bitint = 0
+    self.complex          = 1
+    self.pkgname          = 'fftw3'
     return
 
   def setupDependencies(self, framework):

config/PETSc/packages/hypre.py

   def setupDependencies(self, framework):
     PETSc.package.NewPackage.setupDependencies(self, framework)
     self.compilerFlags   = framework.require('config.compilerFlags', self)
+    self.openmp     = framework.require('PETSc.packages.openmp',self)
     self.blasLapack = framework.require('config.packages.BlasLapack',self)
     self.deps       = [self.mpi,self.blasLapack]
     return
     args.append('--with-lapack-lib-dir=')
     args.append('--with-blas=yes')
     args.append('--with-lapack=yes')
+    if self.openmp.found:
+      args.append('--with-openmp')
 
     # explicitly tell hypre BLAS/LAPACK mangling since it may not match Fortran mangling
     if self.blasLapack.mangling == 'underscore':

config/PETSc/packages/metis.py

 class Configure(PETSc.package.NewPackage):
   def __init__(self, framework):
     PETSc.package.NewPackage.__init__(self, framework)
-    self.download          = ['http://ftp.mcs.anl.gov/pub/petsc/externalpackages/metis-5.1.0-p1.tar.gz']
+    self.download          = ['http://ftp.mcs.anl.gov/pub/petsc/externalpackages/metis-5.0.2-p3.tar.gz']
     self.functions         = ['METIS_PartGraphKway']
     self.includes          = ['metis.h']
     self.liblist           = [['libmetis.a']]

config/PETSc/packages/openmp.py

                  ]:
       if self.setCompilers.checkCompilerFlag(flag):
         ompflag = flag
+        self.found = 1
         break
     self.setCompilers.addCompilerFlag(ompflag)
     self.setCompilers.popLanguage()

config/PETSc/packages/parmetis.py

 class Configure(PETSc.package.NewPackage):
   def __init__(self, framework):
     PETSc.package.NewPackage.__init__(self, framework)
-    self.download          = ['http://ftp.mcs.anl.gov/pub/petsc/externalpackages/parmetis-4.0.3-p1.tar.gz']
+    self.download          = ['http://ftp.mcs.anl.gov/pub/petsc/externalpackages/parmetis-4.0.2-p5.tar.gz']
     self.functions         = ['ParMETIS_V3_PartKway']
     self.includes          = ['parmetis.h']
     self.liblist           = [['libparmetis.a']]

config/PETSc/packages/sowing.py

 class Configure(PETSc.package.NewPackage):
   def __init__(self, framework):
     PETSc.package.NewPackage.__init__(self, framework)
-    self.download          = ['http://ftp.mcs.anl.gov/pub/petsc/externalpackages/sowing-1.1.16e.tar.gz']
+    self.download          = ['http://ftp.mcs.anl.gov/pub/petsc/externalpackages/sowing-1.1.16f.tar.gz']
     self.complex           = 1
     self.double            = 0
     self.requires32bitint  = 0

config/PETSc/packages/ssl.py

+import PETSc.package
+import os
+
+class Configure(PETSc.package.NewPackage):
+  def __init__(self, framework):
+    PETSc.package.NewPackage.__init__(self, framework)
+    self.functions         = ['SSLv23_method']
+    self.includes          = ['openssl/ssl.h']
+    self.liblist           = [['libssl.a','libcrypto.a']]
+    self.complex           = 1   # 0 means cannot use complex
+    self.lookforbydefault  = 1
+    self.double            = 0   # 1 means requires double precision
+    self.requires32bitint  = 0;  # 1 means that the package will not work with 64 bit integers
+    self.worksonWindows    = 1   # requires as lookforbydefault=1 and configure will continue on this test failure
+    return
+
+  def setupHelp(self, help):
+    import nargs
+    PETSc.package.NewPackage.setupHelp(self, help)
+    help.addArgument('SSL', '-with-ssl-certificate=<bool>',nargs.ArgBool(None, 0, 'Require certificate with SSL'))
+
+  def setupDependencies(self, framework):
+    PETSc.package.NewPackage.setupDependencies(self, framework)
+    self.deps = []
+    return
+
+  def getSearchDirectories(self):
+    yield ''
+    return
+
+  def consistencyChecks(self):
+   PETSc.package.NewPackage.consistencyChecks(self)
+   if self.framework.argDB['with-'+self.package]:
+     if self.framework.argDB['with-ssl-certificate']:
+       self.addDefine('USE_SSL_CERTIFICATE','1')

config/PETSc/utilities/libraryOptions.py

 
     if self.debugging.debugging:
       self.addDefine('USE_DEBUG', '1')
+    elif not config.setCompilers.Configure.isIBM(self.framework.getCompiler()):
+      # IBM XLC version 12.1 (BG/Q and POWER) miscompiles PetscMalloc3()
+      # by reordering "*(void**)&ptr = x" as though ptr was not modified
+      # by this statement.
+      self.addDefine('USE_MALLOC_COALESCED',1)
 
     self.useInfo   = self.framework.argDB['with-info']
     self.addDefine('USE_INFO',   self.useInfo)

config/PETSc/utilities/sharedLibraries.py

         # Check for Mac OSX by the presence of dsymutil
         #   could also check flags: -dynamiclib -single_module -multiply_defined suppress -undefined dynamic_lookup
         self.addMakeRule('shared_arch','shared_darwin')
+        self.addMakeMacro('SONAME_FUNCTION', '$(1).$(2).dylib')
+        self.addMakeMacro('SL_LINKER_FUNCTION', '-dynamiclib -install_name $(call SONAME_FUNCTION,$(1),$(2)) -compatibility_version $(2) -current_version $(3) -single_module -multiply_defined suppress -undefined dynamic_lookup')
       else:
         # TODO: check that -Wl,-soname,${LIBNAME}.${SL_LINKER_SUFFIX} can be passed (might fail on Intel)
         # TODO: check whether to use -qmkshrobj or -shared (maybe we can just use self.setCompilers.sharedLibraryFlags)
         # TODO: check whether we need to specify dependent libraries on the link line (long test)
         self.addMakeRule('shared_arch','shared_linux')
+        self.addMakeMacro('SONAME_FUNCTION', '$(1).so.$(2)')
+        self.addMakeMacro('SL_LINKER_FUNCTION', '-shared -Wl,-soname,$(call SONAME_FUNCTION,$(notdir $(1)),$(2))')
       self.addMakeMacro('BUILDSHAREDLIB','yes')
     else:
       self.addMakeRule('shared_arch','')

config/PETSc/utilities/timer.py

-#!/usr/bin/env python
-from __future__ import generators
-import user
-import config.base
-import os
-
-class Configure(config.base.Configure):
-  def __init__(self, framework):
-    config.base.Configure.__init__(self, framework)
-    self.headerPrefix = ''
-    self.substPrefix  = ''
-    return
-
-  def __str__(self):
-    return ''
-
-  def setupHelp(self, help):
-    import nargs
-    help.addArgument('PETSc', '-with-timer=<default,mpi,ibm,microsoft>',  nargs.ArgString(None, None, 'Use high precision timer'))
-    return
-
-  def setupDependencies(self, framework):
-    self.libraries = framework.require('config.libraries', self)
-    return
-
-  def isCrayMPI(self):
-    '''Returns true if using Cray MPI'''
-    if self.libraries.check('', 'MPI_CRAY_barrier'):
-      self.logPrint('Cray-MPI detected')
-      return 1
-    else:
-      self.logPrint('Cray-MPI test failure')
-      return 0
-
-  def configureTimers(self):
-    '''Sets PETSC_HAVE_FAST_MPI_WTIME PETSC_USE_READ_REAL_TIME PETSC_USE_MICROSOFT_TIME.'''
-    if 'with-timer' in self.framework.argDB:
-      self.useTimer = self.framework.argDB['with-timer'].lower()
-    elif self.isCrayMPI():
-      self.useTimer = 'mpi'
-    else:
-      self.useTimer = 'default'
-
-    # now check the timer
-    if self.useTimer == 'mpi':
-      self.addDefine('HAVE_FAST_MPI_WTIME', 1)
-    elif self.useTimer == 'ibm':
-      self.addDefine('USE_READ_REAL_TIME', 1)
-    elif self.useTimer == 'microsoft':
-      self.addDefine('USE_MICROSOFT_TIME', 1)
-    elif self.useTimer != 'default':
-      raise RuntimeError('Unknown Timer type specified :'+self.framework.argDB['with-timer'])
-    return
-
-  def configure(self):
-    self.executeTest(self.configureTimers)
-    return

config/builder.py

                                                                # Full solve 39-42
                                                                {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.015625 -interpolate 1 -petscspace_order 2 -pc_type gamg -ksp_rtol 1.0e-10 -ksp_monitor_short -ksp_converged_reason -snes_monitor_short -snes_converged_reason'},
                                                                {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.015625 -variable_coefficient nonlinear -interpolate 1 -petscspace_order 2 -pc_type svd -ksp_rtol 1.0e-10 -snes_monitor_short -snes_converged_reason'},
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.03125 -variable_coefficient nonlinear -interpolate 1 -petscspace_order 1 -snes_type fas -snes_fas_levels 2 -pc_type svd -ksp_rtol 1.0e-10 -fas_coarse_pc_type svd -fas_coarse_ksp_rtol 1.0e-10 -fas_coarse_snes_monitor_short -snes_monitor_short -snes_fas_monitor -snes_linesearch_type basic -fas_coarse_snes_linesearch_type basic -snes_converged_reason -dm_refine_hierarchy 1 -snes_view -fas_levels_1_snes_type newtonls -fas_levels_1_pc_type svd -fas_levels_1_ksp_rtol 1.0e-10 -fas_levels_1_snes_monitor'},
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.0625 -variable_coefficient nonlinear -interpolate 1 -petscspace_order 1 -snes_type fas -snes_fas_levels 3 -pc_type svd -ksp_rtol 1.0e-10 -fas_coarse_pc_type svd -fas_coarse_ksp_rtol 1.0e-10 -fas_coarse_snes_monitor -snes_monitor_short -snes_fas_monitor -snes_linesearch_type basic -fas_coarse_snes_linesearch_type basic -snes_converged_reason -dm_refine_hierarchy 2 -dm_plex_print_fem 0 -snes_view -fas_levels_1_snes_type newtonls -fas_levels_1_pc_type svd -fas_levels_1_ksp_rtol 1.0e-10 -fas_levels_1_snes_monitor -fas_levels_2_snes_type newtonls -fas_levels_2_pc_type svd -fas_levels_2_ksp_rtol 1.0e-10 -fas_levels_2_snes_monitor'}],
-                        'src/snes/examples/tutorials/ex31':   [# Decoupled field Dirichlet tests 0-6
-                                                               {'numProcs': 1, 'args': '-run_type test -refinement_limit 0.0     -forcing_type constant -bc_type dirichlet -interpolate 1 -show_initial -dm_plex_print_fem 1',
-                                                                'setup': './bin/pythonscripts/PetscGenerateFEMQuadrature.py 2 2 2 1 laplacian 2 1 1 1 gradient 2 1 1 1 identity src/snes/examples/tutorials/ex31.h'},
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.0     -forcing_type constant -bc_type dirichlet -interpolate 1 -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_0_fields 0,1 -pc_fieldsplit_1_fields 2 -pc_fieldsplit_type additive -fieldsplit_0_ksp_type fgmres -fieldsplit_0_pc_type fieldsplit -fieldsplit_0_pc_fieldsplit_type schur -fieldsplit_0_pc_fieldsplit_schur_factorization_type full -fieldsplit_0_fieldsplit_velocity_ksp_type preonly -fieldsplit_0_fieldsplit_velocity_pc_type lu -fieldsplit_0_fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_0_fieldsplit_pressure_pc_type jacobi -fieldsplit_temperature_ksp_type preonly -fieldsplit_temperature_pc_type lu -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view -show_solution 0'},
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -forcing_type constant -bc_type dirichlet -interpolate 1 -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_0_fields 0,1 -pc_fieldsplit_1_fields 2 -pc_fieldsplit_type additive -fieldsplit_0_ksp_type fgmres -fieldsplit_0_pc_type fieldsplit -fieldsplit_0_pc_fieldsplit_type schur -fieldsplit_0_pc_fieldsplit_schur_factorization_type full -fieldsplit_0_fieldsplit_velocity_ksp_type preonly -fieldsplit_0_fieldsplit_velocity_pc_type lu -fieldsplit_0_fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_0_fieldsplit_pressure_pc_type jacobi -fieldsplit_temperature_ksp_type preonly -fieldsplit_temperature_pc_type lu -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view -show_solution 0'},
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.0     -forcing_type linear   -bc_type dirichlet -interpolate 1 -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_0_fields 0,1 -pc_fieldsplit_1_fields 2 -pc_fieldsplit_type additive -fieldsplit_0_ksp_type fgmres -fieldsplit_0_pc_type fieldsplit -fieldsplit_0_pc_fieldsplit_type schur -fieldsplit_0_pc_fieldsplit_schur_factorization_type full -fieldsplit_0_fieldsplit_velocity_ksp_type preonly -fieldsplit_0_fieldsplit_velocity_pc_type lu -fieldsplit_0_fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_0_fieldsplit_pressure_pc_type jacobi -fieldsplit_temperature_ksp_type preonly -fieldsplit_temperature_pc_type lu -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view -show_solution 0'},
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -forcing_type linear   -bc_type dirichlet -interpolate 1 -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_0_fields 0,1 -pc_fieldsplit_1_fields 2 -pc_fieldsplit_type additive -fieldsplit_0_ksp_type fgmres -fieldsplit_0_pc_type fieldsplit -fieldsplit_0_pc_fieldsplit_type schur -fieldsplit_0_pc_fieldsplit_schur_factorization_type full -fieldsplit_0_fieldsplit_velocity_ksp_type preonly -fieldsplit_0_fieldsplit_velocity_pc_type lu -fieldsplit_0_fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_0_fieldsplit_pressure_pc_type jacobi -fieldsplit_temperature_ksp_type preonly -fieldsplit_temperature_pc_type lu -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view -show_solution 0'},
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.0     -forcing_type cubic    -bc_type dirichlet -interpolate 1 -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_0_fields 0,1 -pc_fieldsplit_1_fields 2 -pc_fieldsplit_type additive -fieldsplit_0_ksp_type fgmres -fieldsplit_0_pc_type fieldsplit -fieldsplit_0_pc_fieldsplit_type schur -fieldsplit_0_pc_fieldsplit_schur_factorization_type full -fieldsplit_0_fieldsplit_velocity_ksp_type preonly -fieldsplit_0_fieldsplit_velocity_pc_type lu -fieldsplit_0_fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_0_fieldsplit_pressure_pc_type jacobi -fieldsplit_temperature_ksp_type preonly -fieldsplit_temperature_pc_type lu -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view -show_solution 0'},
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -forcing_type cubic    -bc_type dirichlet -interpolate 1 -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_0_fields 0,1 -pc_fieldsplit_1_fields 2 -pc_fieldsplit_type additive -fieldsplit_0_ksp_type fgmres -fieldsplit_0_pc_type fieldsplit -fieldsplit_0_pc_fieldsplit_type schur -fieldsplit_0_pc_fieldsplit_schur_factorization_type full -fieldsplit_0_fieldsplit_velocity_ksp_type preonly -fieldsplit_0_fieldsplit_velocity_pc_type lu -fieldsplit_0_fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_0_fieldsplit_pressure_pc_type jacobi -fieldsplit_temperature_ksp_type preonly -fieldsplit_temperature_pc_type lu -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view -show_solution 0'},
-                                                               # 2D serial freeslip tests 7-9
-                                                               {'numProcs': 1, 'args': '-run_type test -refinement_limit 0.0     -forcing_type cubic    -bc_type freeslip  -interpolate 1 -show_initial -dm_plex_print_fem 1',
-                                                                'setup': './bin/pythonscripts/PetscGenerateFEMQuadrature.py 2 2 2 1 laplacian 2 1 1 1 gradient 2 1 1 1 identity src/snes/examples/tutorials/ex31.h'},
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.0     -forcing_type cubic    -bc_type freeslip  -interpolate 1 -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_0_fields 0,1 -pc_fieldsplit_1_fields 2 -pc_fieldsplit_type additive -fieldsplit_0_ksp_type fgmres -fieldsplit_0_pc_type fieldsplit -fieldsplit_0_pc_fieldsplit_type schur -fieldsplit_0_pc_fieldsplit_schur_factorization_type full -fieldsplit_0_fieldsplit_velocity_ksp_type preonly -fieldsplit_0_fieldsplit_velocity_pc_type lu -fieldsplit_0_fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_0_fieldsplit_pressure_pc_type jacobi -fieldsplit_temperature_ksp_type preonly -fieldsplit_temperature_pc_type lu -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view -show_solution 0'},
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -forcing_type cubic    -bc_type freeslip  -interpolate 1 -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_0_fields 0,1 -pc_fieldsplit_1_fields 2 -pc_fieldsplit_type additive -fieldsplit_0_ksp_type fgmres -fieldsplit_0_pc_type fieldsplit -fieldsplit_0_pc_fieldsplit_type schur -fieldsplit_0_pc_fieldsplit_schur_factorization_type full -fieldsplit_0_fieldsplit_velocity_ksp_type preonly -fieldsplit_0_fieldsplit_velocity_pc_type lu -fieldsplit_0_fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_0_fieldsplit_pressure_pc_type jacobi -fieldsplit_temperature_ksp_type preonly -fieldsplit_temperature_pc_type lu -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view -show_solution 0'}],
+                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.03125 -variable_coefficient nonlinear -interpolate 1 -petscspace_order 1 -snes_type fas -snes_fas_levels 2 -pc_type svd -ksp_rtol 1.0e-10 -fas_coarse_pc_type svd -fas_coarse_ksp_rtol 1.0e-10 -fas_coarse_snes_monitor_short -snes_monitor_short -snes_linesearch_type basic -fas_coarse_snes_linesearch_type basic -snes_converged_reason -dm_refine_hierarchy 1 -snes_view -fas_levels_1_snes_type newtonls -fas_levels_1_pc_type svd -fas_levels_1_ksp_rtol 1.0e-10 -fas_levels_1_snes_monitor_short'},
+                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.0625 -variable_coefficient nonlinear -interpolate 1 -petscspace_order 1 -snes_type fas -snes_fas_levels 3 -pc_type svd -ksp_rtol 1.0e-10 -fas_coarse_pc_type svd -fas_coarse_ksp_rtol 1.0e-10 -fas_coarse_snes_monitor_short -snes_monitor_short -snes_linesearch_type basic -fas_coarse_snes_linesearch_type basic -snes_converged_reason -dm_refine_hierarchy 2 -dm_plex_print_fem 0 -snes_view -fas_levels_1_snes_type newtonls -fas_levels_1_pc_type svd -fas_levels_1_ksp_rtol 1.0e-10 -fas_levels_1_snes_monitor_short -fas_levels_2_snes_type newtonls -fas_levels_2_pc_type svd -fas_levels_2_ksp_rtol 1.0e-10 -fas_levels_2_snes_monitor_short'},
+                                                               # Restarting 0-1
+                                                               {'num': 'restart_0', 'numProcs': 1, 'args': '-run_type test -refinement_limit 0.0    -bc_type dirichlet -interpolate 1 -petscspace_order 1 -dm_view hdf5:sol.h5 -vec_view hdf5:sol.h5::append'},
+                                                               {'num': 'restart_1', 'numProcs': 1, 'args': '-run_type test -refinement_limit 0.0    -bc_type dirichlet -interpolate 1 -petscspace_order 1 -f sol.h5 -restart'},
+                                                               # Periodicity 0
+                                                               {'num': 'periodic_0', 'numProcs': 1, 'args': '-run_type full -refinement_limit 0.0    -bc_type dirichlet -interpolate 1 -petscspace_order 1'},
+],
                         'src/snes/examples/tutorials/ex33':   [{'numProcs': 1, 'args': '-snes_converged_reason -snes_monitor_short'}],
                         'src/snes/examples/tutorials/ex36':   [# 2D serial P2/P1 tests 0-1
                                                                {'numProcs': 1, 'args': ''}],
                         'src/snes/examples/tutorials/ex52':   [# 2D Laplacian 0-3
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function',
-                                                                'setup': './bin/pythonscripts/PetscGenerateFEMQuadrature.py 2 1 1 1 laplacian src/snes/examples/tutorials/ex52.h',
-                                                                'source': ['src/snes/examples/tutorials/ex52_integrateElement.cu'], 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -batch', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -batch -gpu', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -batch -gpu -gpu_batches 2', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -petscspace_order 1 -compute_function -batch -gpu -gpu_batches 2', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -petscspace_order 1 -compute_function -batch -gpu -gpu_batches 4', 'requires': ['cuda']},
                                                                # 2D Elasticity 9-12
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -op_type elasticity',
-                                                                'setup': './bin/pythonscripts/PetscGenerateFEMQuadrature.py 2 1 2 1 elasticity src/snes/examples/tutorials/ex52.h',
-                                                                'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -op_type elasticity', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -op_type elasticity -batch', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -op_type elasticity -batch -gpu', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -op_type elasticity -batch -gpu -gpu_batches 2', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -petscspace_order 1 -compute_function -op_type elasticity -batch -gpu -gpu_batches 2', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -petscspace_order 1 -compute_function -op_type elasticity -batch -gpu -gpu_batches 4', 'requires': ['cuda']},
                                                                # 3D Laplacian 18-20
-                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function',
-                                                                'setup': './bin/pythonscripts/PetscGenerateFEMQuadrature.py 3 1 1 1 laplacian src/snes/examples/tutorials/ex52.h',
-                                                                'source': ['src/snes/examples/tutorials/ex52_integrateElement.cu'], 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -batch', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -batch -gpu', 'requires': ['cuda']},
                                                                # 3D Laplacian refined 21-24
                                                                {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -petscspace_order 1 -compute_function -batch -gpu -gpu_batches 2', 'requires': ['cuda']},
                                                                # 3D Elasticity 25-27
                                                                {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -op_type elasticity',
-                                                                'setup': './bin/pythonscripts/PetscGenerateFEMQuadrature.py 3 1 3 1 elasticity src/snes/examples/tutorials/ex52.h',
                                                                 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -op_type elasticity -batch', 'requires': ['cuda']},
                                                                {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0 -petscspace_order 1 -compute_function -op_type elasticity -batch -gpu', 'requires': ['cuda']},
                                                                #{'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type full -fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_velocity_ksp_type gmres -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -fieldsplit_pressure_inner_ksp_type preonly -fieldsplit_pressure_inner_pc_type jacobi -fieldsplit_pressure_inner_pc_jacobi_rowsum -fieldsplit_pressure_upper_ksp_type preonly -fieldsplit_pressure_upper_pc_type jacobi -fieldsplit_pressure_upper_pc_jacobi_rowsum -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver'},
                                                                # Stokes preconditioners with MF Jacobian action 37-42
                                                                #   Jacobi
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_gmres_restart 100 -pc_type jacobi -ksp_rtol 1.0e-9 -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver'},
+                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_gmres_restart 100 -pc_type jacobi -ksp_rtol 1.0e-9 -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver', 'requires': 'Broken'},
                                                                #  Block diagonal \begin{pmatrix} A & 0 \\ 0 & I \end{pmatrix}
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type additive -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver'},
+                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type additive -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver', 'requires': 'Broken'},
                                                                #  Block triangular \begin{pmatrix} A & B \\ 0 & I \end{pmatrix}
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type multiplicative -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver'},
+                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type multiplicative -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver', 'requires': 'Broken'},
                                                                #  Diagonal Schur complement \begin{pmatrix} A & 0 \\ 0 & S \end{pmatrix}
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type diag -fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_velocity_ksp_type gmres -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver'},
+                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type diag -fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_velocity_ksp_type gmres -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver', 'requires': 'Broken'},
                                                                #  Upper triangular Schur complement \begin{pmatrix} A & B \\ 0 & S \end{pmatrix}
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type upper -fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_velocity_ksp_type gmres -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver'},
+                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type upper -fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_velocity_ksp_type gmres -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver', 'requires': 'Broken'},
                                                                #  Lower triangular Schur complement \begin{pmatrix} A & B \\ 0 & S \end{pmatrix}
-                                                               #{'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type lower -fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_velocity_ksp_type gmres -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver'},
+                                                               #{'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type lower -fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_velocity_ksp_type gmres -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver', 'requires': 'Broken'},
                                                                #  Full Schur complement \begin{pmatrix} A & B \\ B^T & S \end{pmatrix}
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type full -fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_velocity_ksp_type gmres -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver'},
+                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -jacobian_mf -ksp_type fgmres -ksp_gmres_restart 100 -ksp_rtol 1.0e-9 -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type full -fieldsplit_pressure_ksp_rtol 1e-10 -fieldsplit_velocity_ksp_type gmres -fieldsplit_velocity_pc_type lu -fieldsplit_pressure_pc_type jacobi -snes_monitor_short -ksp_monitor_short -snes_converged_reason -ksp_converged_reason -snes_view -show_solution 0', 'parser': 'Solver', 'requires': 'Broken'},
                                                                # 3D serial P1 tests 43-46
                                                                {'numProcs': 1, 'args': '-run_type test -dim 3 -refinement_limit 0.0    -bc_type dirichlet -interpolate 0 -vel_petscspace_order 1 -pres_petscspace_order 1 -show_initial -dm_plex_print_fem 1'},
                                                                {'numProcs': 1, 'args': '-run_type test -dim 3 -refinement_limit 0.0    -bc_type dirichlet -interpolate 1 -vel_petscspace_order 1 -pres_petscspace_order 1 -show_initial -dm_plex_print_fem 1'},
                                                                {'numProcs': 1, 'args': '-run_type test -dim 3 -refinement_limit 0.0125 -bc_type dirichlet -interpolate 0 -vel_petscspace_order 1 -pres_petscspace_order 1 -show_initial -dm_plex_print_fem 1'},
                                                                {'numProcs': 1, 'args': '-run_type test -dim 3 -refinement_limit 0.0125 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 1 -pres_petscspace_order 1 -show_initial -dm_plex_print_fem 1'},
                                                                ],
-                        'src/snes/examples/tutorials/ex72':   [# 2D serial P1 tests 0-1
-                                                               {'numProcs': 1, 'args': '-run_type test -refinement_limit 0.0    -bc_type dirichlet -show_initial -dm_plex_print_fem 1 -show_jacobian',
-                                                                'setup': './bin/pythonscripts/PetscGenerateFEMQuadratureTensorProduct.py 2 1 2 1 laplacian 2 1 1 1 gradient src/snes/examples/tutorials/ex72.h'},
-                                                               {'numProcs': 1, 'args': '-run_type test -refinement_limit 0.0625 -bc_type dirichlet -show_initial -dm_plex_print_fem 1 -show_jacobian'},
-                                                               # 2D serial P2 tests 2-3
-                                                               #{'numProcs': 1, 'args': '-run_type test -refinement_limit 0.0    -bc_type dirichlet -show_initial -dm_plex_print_fem 1 -show_jacobian',
-                                                               # 'setup': './bin/pythonscripts/PetscGenerateFEMQuadratureTensorProduct.py 2 2 2 1 laplacian 2 1 1 1 gradient src/snes/examples/tutorials/ex62.h'},
-
-                                                               #{'numProcs': 1, 'args': '-run_type test -refinement_limit 0.0625 -bc_type dirichlet -show_initial -dm_plex_print_fem 1 -show_jacobian'},
-                                                               # Parallel tests 4-9
-                                                               {'numProcs': 2, 'args': '-run_type test -refinement_limit 0.0    -bc_type dirichlet -show_jacobian',
-                                                                'setup': './bin/pythonscripts/PetscGenerateFEMQuadratureTensorProduct.py 2 1 2 1 laplacian 2 1 1 1 gradient src/snes/examples/tutorials/ex72.h'},
-                                                               {'numProcs': 3, 'args': '-run_type test -refinement_limit 0.0    -bc_type dirichlet -show_jacobian'},
-                                                               {'numProcs': 2, 'args': '-run_type test -refinement_limit 0.0625 -bc_type dirichlet -show_jacobian'},
-                                                               {'numProcs': 3, 'args': '-run_type test -refinement_limit 0.0625 -bc_type dirichlet -show_jacobian'},
-                                                               {'numProcs': 5, 'args': '-run_type test -refinement_limit 0.0625 -bc_type dirichlet -show_jacobian'},
-                                                               # Full solutions 10-17
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.0    -bc_type dirichlet -pc_type jacobi -ksp_rtol 1.0e-9 -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view'},
-                                                               #{'numProcs': 1, 'args': '-run_type full -refinement_limit 0.0625 -bc_type dirichlet -pc_type jacobi -ksp_rtol 1.0e-9 -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view'},
-                                                               #{'numProcs': 2, 'args': '-run_type full -refinement_limit 0.0625 -bc_type dirichlet -pc_type jacobi -ksp_rtol 1.0e-9 -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view'},
-                                                               #{'numProcs': 3, 'args': '-run_type full -refinement_limit 0.0625 -bc_type dirichlet -pc_type jacobi -ksp_rtol 1.0e-9 -snes_converged_reason -snes_view'},
-                                                               #{'numProcs': 5, 'args': '-run_type full -refinement_limit 0.0625 -bc_type dirichlet -pc_type jacobi -ksp_rtol 1.0e-9 -snes_converged_reason -snes_view'},
-                                                               #{'numProcs': 1, 'args': '-run_type full -refinement_limit 0.0625 -bc_type dirichlet -pc_type jacobi -ksp_rtol 1.0e-9 -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view',
-                                                               # 'setup': './bin/pythonscripts/PetscGenerateFEMQuadrature.py 2 2 2 1 laplacian 2 1 1 1 gradient src/snes/examples/tutorials/ex62.h'},
-                                                               #{'numProcs': 2, 'args': '-run_type full -refinement_limit 0.0625 -bc_type dirichlet -pc_type jacobi -ksp_rtol 1.0e-9 -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view'},
-                                                               #{'numProcs': 3, 'args': '-run_type full -refinement_limit 0.0625 -bc_type dirichlet -pc_type jacobi -ksp_rtol 1.0e-9 -snes_converged_reason -snes_view'},
-                                                               #{'numProcs': 5, 'args': '-run_type full -refinement_limit 0.0625 -bc_type dirichlet -pc_type jacobi -ksp_rtol 1.0e-9 -snes_converged_reason -snes_view'}
-],
                         'src/ts/examples/tutorials/ex11':      [# 2D 0-6
                                                                 {'numProcs': 1, 'args': '-ufv_vtk_interval 0 -f %(meshes)s/sevenside.exo'},
                                                                 {'numProcs': 1, 'args': '-ufv_vtk_interval 0 -f %(meshes)s/sevenside-quad-15.exo'},

config/examples/arch-linux-cxx-cmplx-pkgs-64idx.py

+#!/usr/bin/env python
+
+configure_options = [
+  '--with-cc=clang',
+  '--with-fc=gfortran',
+  '--with-cxx=clang++',
+
+  '--with-clanguage=cxx',
+  '--with-scalar-type=complex',
+  '--with-64-bit-indices=1',
+
+  '--download-mpich=1',
+  '--download-cmake=1',
+  '--download-metis=1',
+  '--download-parmetis=1',
+  '--download-pastix=1',
+  '--download-ptscotch=1',
+  '--download-superlu_dist=1',
+
+  ]
+
+if __name__ == '__main__':
+  import sys,os
+  sys.path.insert(0,os.path.abspath('config'))
+  import configure
+  configure.petsc_configure(configure_options)

config/examples/arch-linux-gcc-ifc-cmplx.py

+#!/usr/bin/env python
+
+# Note: Intel 7.1 Fortran cannot work with g++ 3.3
+configure_options = [
+  '--with-cc=gcc',
+  '--with-fc=ifort',
+  '--with-cxx=g++',
+  '--with-clib-autodetect=0',
+  '--with-fortranlib-autodetect=0',
+  '--with-cxxlib-autodetect=0',
+  'LIBS=-L/soft/com/packages/intel/13/079/composer_xe_2013.0.079/compiler/lib/intel64 -lifcore -ldl -limf',
+  '--with-scalar-type=complex',
+  '--download-mpich=1',
+  '--download-mpich-pm=gforker',
+  '--download-fblaslapack=1'
+  ]
+
+if __name__ == '__main__':
+  import sys,os
+  sys.path.insert(0,os.path.abspath('config'))
+  import configure
+  configure.petsc_configure(configure_options)

config/examples/arch-linux-gcc-ifc.py

-#!/usr/bin/env python
-
-# Note: Intel 7.1 Fortran cannot work with g++ 3.3
-configure_options = [
-  '--with-cc=gcc',
-  '--with-fc=ifort',
-  '--with-cxx=g++',
-  '--with-clib-autodetect=0',
-  '--with-fortranlib-autodetect=0',
-  '--with-cxxlib-autodetect=0',
-  'LIBS=-L/soft/com/packages/intel/13/079/composer_xe_2013.0.079/compiler/lib/intel64 -lifcore -ldl -limf',
-  '--with-scalar-type=complex',
-  '--download-mpich=1',
-  '--download-mpich-pm=gforker',
-  '--download-fblaslapack=1'
-  ]
-
-if __name__ == '__main__':
-  import sys,os
-  sys.path.insert(0,os.path.abspath('config'))
-  import configure
-  configure.petsc_configure(configure_options)

config/examples/arch-osx-pgi-pkgs-opt.py

+#!/usr/bin/env python
+
+# Note: /Applications/Free PGI.app/Contents/Resources/pgi/osx86-64/14.3/include/va_list.h
+# is edited to worarround duplicate 'typedef' warnings. And the following to avoid link warning
+# cd "/Applications/Free PGI.app/Contents/Resources/pgi/osx86-64/14.3" && ln -s lib libso
+
+configure_options = [
+  '--with-cc=pgcc',
+  '--with-fc=pgfortran',
+  '--with-cxx=0', # osx PGI does not have c++? And autodetect code messes up -L "foo bar" paths
+
+  '--download-mpich=1',
+  '--download-mpich-device=ch3:nemesis', # socket code gives 'Error from ioctl = 6; Error is: : Device not configured'
+  '--download-cmake=1',
+  '--download-metis=1',
+  '--download-parmetis=1',
+  '--download-ptscotch=1',
+  '--download-triangle=1',
+  '--download-superlu=1',
+  '--download-superlu_dist=1',
+  '--download-scalapack=1',
+  '--download-mumps=1',
+  #'--download-parms=1',
+  #'--download-hdf5',
+  '--download-sundials=1',
+  #'--download-hypre=1',
+  '--download-suitesparse=1',
+  '--download-chaco=1',
+  '--download-spai=1',
+  #'--download-moab=1',
+  ]
+
+if __name__ == '__main__':
+  import sys,os
+  sys.path.insert(0,os.path.abspath('config'))
+  import configure
+  configure.petsc_configure(configure_options)

config/examples/asterix/asterix32-sun.py

-#!/usr/bin/env python
-
-configure_options = [
-  '--with-mpi-dir=/home/balay/soft/linux32/mpich2-1.1-sun',
-  '--with-shared-libraries=1',
-  '--with-debugging=0',
-  #'CFLAGS=-g',                 # workarround for optimzier bug with gltr.c
-  #'LIBS=/usr/lib/libm.a'       # workarround to configure convering '/usr/lib/libm.a' to '-lm'
-  ]
-