Commits

Peter Brune committed 5c44807 Merge

Merge branch 'prbrune/sf-sfbasicops' into prbrune/mat-matcolor

  • Participants
  • Parent commits 3142415, 8e99f7e

Comments (0)

Files changed (49)

 
 Andy Terrel <aterrel@uchicago.edu>
 Aron Ahmadia <aron@ahmadia.net>                 <ahmadia@harley.mcs.anl.gov>
+Barry Smith <bsmith@mcs.anl.gov>                BarryFSmith
 Blaise Bourdin <bourdin@lsu.edu>
 Brad Aagaard <baagaard@usgs.gov>                <baagaard at usgs.gov>
 Ethan Coon <ecoon@lanl.gov>

File bin/maint/gcov.py

 
 def main():
 
-    USER = os.environ>['USER']
+    USER = os.environ['USER']
     gcov_dir = "/tmp/gcov-"+USER
 
     if (sys.argv[1] == "-run_gcov"):

File config/BuildSystem/config/package.py

     self.gitcommit        = None # Git commit to use for downloads (used in preference to tarball downloads)
     self.giturls          = []   # list of Git repository URLs to be used for downloads
     self.download         = []   # list of URLs where repository or tarballs may be found
+    self.downloadURLSetByUser = False # user overrode package file by providing download location
     self.deps             = []   # other packages whose dlib or include we depend on, usually we also use self.framework.require()
     self.defaultLanguage  = 'C'  # The language in which to run tests
     self.liblist          = [[]] # list of libraries we wish to check for (override with your own generateLibList())
     downloadPackageVal = self.framework.argDB['download-'+self.downloadname.lower()]
     if requireDownload and isinstance(downloadPackageVal, str):
       self.download = [downloadPackageVal]
+      self.downloadURLSetByUser = True
       downloadPackage = 1
     elif downloadPackageVal == 1 and requireDownload:
       downloadPackage = 1
         download_urls.append(url.replace('http://','ftp://'))
     # now attempt to download each url until any one succeeds.
     err =''
-    if hasattr(self.sourceControl, 'git') and self.gitcommit and self.gitPreReqCheck():
+    if not self.downloadURLSetByUser and hasattr(self.sourceControl, 'git') and self.gitcommit and self.gitPreReqCheck():
       for giturl in self.giturls: # First try to fetch using Git
         try:
           gitrepo = os.path.join(self.externalPackagesDir, self.downloadname)

File config/builder.py

                                                                {'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'}],
                         'src/snes/examples/tutorials/ex33':   [{'numProcs': 1, 'args': '-snes_converged_reason -snes_monitor_short'}],
                         'src/snes/examples/tutorials/ex52':   [# 2D Laplacian 0-3
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -compute_function',
+                                                               {'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 -compute_function -batch', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -compute_function -batch -gpu', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -compute_function -batch -gpu -gpu_batches 2', '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']},
                                                                # 2D Laplacian refined 4-8
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -compute_function', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -compute_function -batch', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -compute_function -batch -gpu', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -compute_function -batch -gpu -gpu_batches 2', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -compute_function -batch -gpu -gpu_batches 4', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -petscspace_order 1 -compute_function', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -petscspace_order 1 -compute_function -batch', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -petscspace_order 1 -compute_function -batch -gpu', '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 -compute_function -op_type elasticity',
+                                                               {'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 -compute_function -op_type elasticity -batch', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -compute_function -op_type elasticity -batch -gpu', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -compute_function -op_type elasticity -batch -gpu -gpu_batches 2', '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']},
                                                                # 2D Elasticity refined 13-17
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -compute_function -op_type elasticity', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -compute_function -op_type elasticity -batch', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -compute_function -op_type elasticity -batch -gpu', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -compute_function -op_type elasticity -batch -gpu -gpu_batches 2', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -compute_function -op_type elasticity -batch -gpu -gpu_batches 4', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -petscspace_order 1 -compute_function -op_type elasticity', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -petscspace_order 1 -compute_function -op_type elasticity -batch', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0625 -petscspace_order 1 -compute_function -op_type elasticity -batch -gpu', '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 -compute_function',
+                                                               {'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 -compute_function -batch', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0 -compute_function -batch -gpu', '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 -compute_function', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -compute_function -batch', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -compute_function -batch -gpu', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -compute_function -batch -gpu -gpu_batches 2', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -petscspace_order 1 -compute_function', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -petscspace_order 1 -compute_function -batch', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -petscspace_order 1 -compute_function -batch -gpu', 'requires': ['cuda']},
+                                                               {'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 -compute_function -op_type elasticity',
+                                                               {'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 -compute_function -op_type elasticity -batch', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0 -compute_function -op_type elasticity -batch -gpu', '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']},
                                                                # 3D Elasticity refined 28-31
-                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -compute_function -op_type elasticity', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -compute_function -op_type elasticity -batch', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -compute_function -op_type elasticity -batch -gpu', 'requires': ['cuda']},
-                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -compute_function -op_type elasticity -batch -gpu -gpu_batches 2', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -petscspace_order 1 -compute_function -op_type elasticity', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -petscspace_order 1 -compute_function -op_type elasticity -batch', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -petscspace_order 1 -compute_function -op_type elasticity -batch -gpu', 'requires': ['cuda']},
+                                                               {'numProcs': 1, 'args': '-dim 3 -dm_view -refinement_limit 0.0125 -petscspace_order 1 -compute_function -op_type elasticity -batch -gpu -gpu_batches 2', 'requires': ['cuda']},
                                                                # 2D Laplacian OpenCL 32-35
                                                                {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -compute_function -petscspace_order 1 -petscfe_type basic -dm_plex_print_fem 1',
                                                                 'requires': ['opencl']},
                                                                 'requires': ['opencl']},
                                                                {'numProcs': 1, 'args': '-dm_view -refinement_limit 0.0 -compute_function -petscspace_order 1 -petscfe_type opencl -petscfe_num_blocks 2 -petscfe_num_batches 2 -dm_plex_print_fem 1 -dm_plex_print_tol 1.0e-06',
                                                                 'requires': ['opencl']},
-                                                               # 2D Laplacian Parallel Refinement 36-38
-                                                               {'numProcs': 2, 'args': '-dm_view -interpolate -refinement_limit 0.0625 -refinement_uniform -compute_function -batch -gpu -gpu_batches 2',
-                                                                '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': 2, 'args': '-dm_view -interpolate -refinement_limit 0.0625 -refinement_uniform -compute_function -batch -gpu -gpu_batches 2',
-                                                                'requires': ['opencl']},
-                                                               {'numProcs': 2, 'args': '-dm_view -interpolate -refinement_limit 0.0625 -refinement_uniform -refinement_rounds 3 -compute_function -batch -gpu -gpu_batches 2',
-                                                                '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']},
+                                                               # 2D Laplacian Parallel Refinement 36-37
+                                                               {'numProcs': 2, 'args': '-dm_view -interpolate -refinement_limit 0.0625 -petscspace_order 1 -refinement_uniform -compute_function -batch -gpu -gpu_batches 2', 'requires': ['opencl']},
+                                                               {'numProcs': 2, 'args': '-dm_view -interpolate -refinement_limit 0.0625 -petscspace_order 1 -refinement_uniform -refinement_rounds 3 -compute_function -batch -gpu -gpu_batches 2', 'requires': ['opencl']},
                                                                ],
                         'src/snes/examples/tutorials/ex62':   [# 2D serial P1 tests 0-3
                                                                {'numProcs': 1, 'args': '-run_type test -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 -refinement_limit 0.0625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -show_initial -dm_plex_print_fem 1'},
                                                                # Parallel tests 6-17
-                                                               {'numProcs': 2, 'args': '-run_type test -refinement_limit 0.0    -bc_type dirichlet -interpolate 0 -vel_petscspace_order 1 -pres_petscspace_order 1 -dm_plex_print_fem 1',
-                                                                'setup': './bin/pythonscripts/PetscGenerateFEMQuadrature.py 2 1 2 1 laplacian 2 1 1 1 gradient src/snes/examples/tutorials/ex62.h'},
+                                                               {'numProcs': 2, 'args': '-run_type test -refinement_limit 0.0    -bc_type dirichlet -interpolate 0 -vel_petscspace_order 1 -pres_petscspace_order 1 -dm_plex_print_fem 1'},
                                                                {'numProcs': 3, 'args': '-run_type test -refinement_limit 0.0    -bc_type dirichlet -interpolate 0 -vel_petscspace_order 1 -pres_petscspace_order 1 -dm_plex_print_fem 1'},
                                                                {'numProcs': 5, 'args': '-run_type test -refinement_limit 0.0    -bc_type dirichlet -interpolate 0 -vel_petscspace_order 1 -pres_petscspace_order 1 -dm_plex_print_fem 1'},
                                                                {'numProcs': 2, 'args': '-run_type test -refinement_limit 0.0    -bc_type dirichlet -interpolate 1 -vel_petscspace_order 1 -pres_petscspace_order 1 -dm_plex_print_fem 1'},
                                                                {'numProcs': 2, 'args': '-run_type full -refinement_limit 0.0625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 1 -pres_petscspace_order 1 -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 -interpolate 1 -vel_petscspace_order 1 -pres_petscspace_order 1 -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 -interpolate 1 -vel_petscspace_order 1 -pres_petscspace_order 1 -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 -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -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': 1, 'args': '-run_type full -refinement_limit 0.0625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -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 -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -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 -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -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 -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -pc_type jacobi -ksp_rtol 1.0e-9 -snes_converged_reason -snes_view'},
                                                                # Stokes preconditioners 30-36
                                                                #   Jacobi
-                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -ksp_gmres_restart 100 -pc_type jacobi -ksp_rtol 1.0e-9 -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view -show_solution 0',
-                                                                'setup': './bin/pythonscripts/PetscGenerateFEMQuadrature.py 2 2 2 1 laplacian 2 1 1 1 gradient src/snes/examples/tutorials/ex62.h'},
+                                                               {'numProcs': 1, 'args': '-run_type full -refinement_limit 0.00625 -bc_type dirichlet -interpolate 1 -vel_petscspace_order 2 -pres_petscspace_order 1 -ksp_gmres_restart 100 -pc_type jacobi -ksp_rtol 1.0e-9 -snes_monitor_short -ksp_monitor_short -snes_converged_reason -snes_view -show_solution 0'},
                                                                #  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 -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 -snes_view -show_solution 0'},
                                                                #  Block triangular \begin{pmatrix} A & B \\ 0 & I \end{pmatrix}
                                                                #  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 -snes_view -show_solution 0'},
                                                                # 3D serial P1 tests 43-45
-                                                               {'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',
-                                                                'setup': './bin/pythonscripts/PetscGenerateFEMQuadrature.py 3 1 3 1 laplacian 3 1 1 1 gradient src/snes/examples/tutorials/ex62.h'},
+                                                               {'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/ex67':   [{'numProcs': 1, 'args': '-dm_view -snes_monitor -ksp_monitor -snes_view',
-                                                                'setup': 'bin/pythonscripts/PetscGenerateFEMQuadratureTensorProduct.py 2 1 2 1 laplacian 2 0 1 1 gradient src/snes/examples/tutorials/ex67.h'},
-                                                               {'numProcs': 2, 'args': '-dm_view -snes_monitor -ksp_monitor -snes_view'}],
                         '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'},

File config/examples/arch-linux-complex-gcov.py

 configure_options = [
   '--with-clanguage=cxx',
   '--with-scalar-type=complex',
-  #'--with-gcov=1',
+  '--with-gcov=1',
   '--download-mpich=1',
   ]
 

File config/examples/arch-linux-gcov.py

 
 configure_options = [
   '--download-mpich=1',
-  #'--with-gcov=1'
+  '--with-gcov=1'
   ]
 
 if __name__ == '__main__':

File config/examples/arch-linux-pkgs-gcov.py

 #!/usr/bin/env python
 
 configure_options = [
-  #'--with-gcov=1',
+  '--with-gcov=1',
   '--download-mpich=1',
   '--download-f-blas-lapack=1',
   '--download-hypre=1',

File include/mpiuni/mpi.h

 /* In order to handle datatypes, we make them into "sizeof(raw-type)";
     this allows us to do the MPIUNI_Memcpy's easily */
 #define MPI_Datatype         int
-#define MPI_FLOAT            sizeof(float)
-#define MPI_DOUBLE           sizeof(double)
-#define MPI_LONG_DOUBLE      sizeof(long double)
-#define MPI_CHAR             sizeof(char)
-#define MPI_BYTE             sizeof(char)
-#define MPI_INT              sizeof(int)
-#define MPI_LONG             sizeof(long)
-#define MPI_LONG_LONG_INT    sizeof(long long)
-#define MPI_SHORT            sizeof(short)
-#define MPI_UNSIGNED_SHORT   sizeof(unsigned short)
-#define MPI_UNSIGNED         sizeof(unsigned)
-#define MPI_UNSIGNED_CHAR    sizeof(unsigned char)
-#define MPI_UNSIGNED_LONG    sizeof(unsigned long)
-#define MPI_UNSIGNED_LONG_LONG sizeof(unsigned long long)
-#define MPI_COMPLEX          2*sizeof(float)
-#define MPI_C_COMPLEX        2*sizeof(float)
-#define MPI_C_DOUBLE_COMPLEX 2*sizeof(double)
-#define MPI_FLOAT_INT        (sizeof(float) + sizeof(int))
-#define MPI_DOUBLE_INT       (sizeof(double) + sizeof(int))
-#define MPI_LONG_INT         (sizeof(long) + sizeof(int))
-#define MPI_SHORT_INT        (sizeof(short) + sizeof(int))
-#define MPI_2INT             (2* sizeof(int))
+#define MPI_FLOAT            (1 << 16 | sizeof(float))
+#define MPI_DOUBLE           (1 << 16 | sizeof(double))
+#define MPI_LONG_DOUBLE      (1 << 16 | sizeof(long double))
+
+#define MPI_COMPLEX          (2 << 16 | 2*sizeof(float))
+#define MPI_C_COMPLEX        (2 << 16 | 2*sizeof(float))
+#define MPI_C_DOUBLE_COMPLEX (2 << 16 | 2*sizeof(double))
+
+#define MPI_CHAR             (3 << 16 | sizeof(char))
+#define MPI_BYTE             (3 << 16 | sizeof(char))
+#define MPI_UNSIGNED_CHAR    (3 << 16 | sizeof(unsigned char))
+
+#define MPI_INT              (4 << 16 | sizeof(int))
+#define MPI_LONG             (4 << 16 | sizeof(long))
+#define MPI_LONG_LONG_INT    (4 << 16 | sizeof(long long))
+#define MPI_SHORT            (4 << 16 | sizeof(short))
+
+#define MPI_UNSIGNED_SHORT   (5 << 16 | sizeof(unsigned short))
+#define MPI_UNSIGNED         (5 << 16 | sizeof(unsigned))
+#define MPI_UNSIGNED_LONG    (5 << 16 | sizeof(unsigned long))
+#define MPI_UNSIGNED_LONG_LONG (5 << 16 | sizeof(unsigned long long))
+
+#define MPI_FLOAT_INT        (10 << 16 | (sizeof(float) + sizeof(int)))
+#define MPI_DOUBLE_INT       (11 << 16 | (sizeof(double) + sizeof(int)))
+#define MPI_LONG_INT         (12 << 16 | (sizeof(long) + sizeof(int)))
+#define MPI_SHORT_INT        (13 << 16 | (sizeof(short) + sizeof(int)))
+#define MPI_2INT             (14 << 16 | (2* sizeof(int)))
 
 #if defined(PETSC_USE_REAL___FLOAT128)
 extern MPI_Datatype MPIU___FLOAT128;
-#define MPI_sizeof(datatype) ((datatype == MPIU___FLOAT128) ? 2*sizeof(double) : datatype)
+#define MPI_sizeof(datatype) ((datatype == MPIU___FLOAT128) ? 2*sizeof(double) : (datatype) & 0xff)
 #else
-#define MPI_sizeof(datatype) (datatype)
+#define MPI_sizeof(datatype) ((datatype) & 0xff)
 #endif
 extern int MPIUNI_Memcpy(void*,const void*,int);
 
 #define MPI_MODE_WRONLY   0
 #define MPI_MODE_CREATE   0
 
-#define MPI_SUM           0
-#define MPI_MAX           0
-#define MPI_MIN           0
-#define MPI_REPLACE       0
+#define MPI_SUM           1
+#define MPI_MAX           2
+#define MPI_MIN           3
+#define MPI_REPLACE       4
+#define MPI_PROD          5
+#define MPI_LAND          6
+#define MPI_BAND          7
+#define MPI_LOR           8
+#define MPI_BOR           9
+#define MPI_LXOR          10
+#define MPI_BXOR          11
 #define MPI_ANY_TAG     (-1)
 #define MPI_DATATYPE_NULL 0
 #define MPI_PACKED        0
 #define MPI_Address(location,address) \
      (*(address) = (MPIUNI_INTPTR)(char *)(location),MPI_SUCCESS)
 #define MPI_Type_extent(datatype,extent) *(extent) = datatype
-#define MPI_Type_size(datatype,size) *(size) = datatype
+#define MPI_Type_size(datatype,size) (*(size) = (datatype) & 0xff, MPI_SUCCESS)
 #define MPI_Type_lb(datatype,displacement) \
      MPI_Abort(MPI_COMM_WORLD,0)
 #define MPI_Type_ub(datatype,displacement) \

File include/petscpc.h

 #define PCGALERKIN        "galerkin"
 #define PCEXOTIC          "exotic"
 #define PCHMPI            "hmpi"
-#define PCSUPPORTGRAPH    "supportgraph"
 #define PCASA             "asa"
 #define PCCP              "cp"
 #define PCBFBT            "bfbt"

File include/petscvec.h

 
 #if defined(PETSC_HAVE_CUSP)
 typedef struct _p_PetscCUSPIndices* PetscCUSPIndices;
-PETSC_EXTERN PetscErrorCode PetscCUSPIndicesCreate(PetscInt, PetscInt*,PetscInt, PetscInt*,PetscCUSPIndices*);
-PETSC_EXTERN PetscErrorCode PetscCUSPIndicesDestroy(PetscCUSPIndices*);
+typedef struct _p_VecScatterCUSPIndices_StoS* VecScatterCUSPIndices_StoS;
+typedef struct _p_VecScatterCUSPIndices_PtoP* VecScatterCUSPIndices_PtoP;
 PETSC_EXTERN PetscErrorCode VecCUSPCopyToGPUSome_Public(Vec,PetscCUSPIndices);
 PETSC_EXTERN PetscErrorCode VecCUSPCopyFromGPUSome_Public(Vec,PetscCUSPIndices);
 PETSC_EXTERN PetscErrorCode VecScatterInitializeForGPU(VecScatter,Vec,ScatterMode);

File include/petscversion.h

 #define PETSC_VERSION_RELEASE    0
 #define PETSC_VERSION_MAJOR      3
 #define PETSC_VERSION_MINOR      4
-#define PETSC_VERSION_SUBMINOR   2
+#define PETSC_VERSION_SUBMINOR   3
 #define PETSC_VERSION_PATCH      0
 #define PETSC_RELEASE_DATE       "May, 13, 2013"
 #define PETSC_VERSION_DATE       "unknown"
 	 fi
 	@egrep -i "( error | error: |no such file or directory)" ${PETSC_ARCH}/conf/make.log | tee ${PETSC_ARCH}/conf/error.log > /dev/null
 	@if test -s ${PETSC_ARCH}/conf/error.log; then \
-           printf ${PETSC_TEXT_HILIGHT}"**************************ERROR************************************\n" 2>&1 | tee -a ${PETSC_ARCH}/conf/make.log; \
+           printf ${PETSC_TEXT_HILIGHT}"**************************ERROR*************************************\n" 2>&1 | tee -a ${PETSC_ARCH}/conf/make.log; \
            echo "  Error during compile, check ${PETSC_ARCH}/conf/make.log" 2>&1 | tee -a ${PETSC_ARCH}/conf/make.log; \
            echo "  Send it and ${PETSC_ARCH}/conf/configure.log to petsc-maint@mcs.anl.gov" 2>&1 | tee -a ${PETSC_ARCH}/conf/make.log;\
            printf "********************************************************************"${PETSC_TEXT_NORMAL}"\n" 2>&1 | tee -a ${PETSC_ARCH}/conf/make.log;\

File src/dm/impls/da/gr1.c

   PetscMPIInt       rank,size,tag1,tag2;
   PetscInt          i,n,N,step,istart,isize,j,nbounds;
   MPI_Status        status;
-  PetscReal         coors[4],ymin,ymax,min,max,xmin,xmax,tmp,xgtmp;
+  PetscReal         coors[4],ymin,ymax,min,max,xmin = 0.0,xmax = 0.0,tmp = 0.0,xgtmp = 0.0;
   const PetscScalar *array,*xg;
   PetscDraw         draw;
   PetscBool         isnull,showpoints = PETSC_FALSE;

File src/dm/impls/plex/examples/tests/ex8.c

       if (user.interpolate) {ierr = CheckFVMGeometry(user.dm, c+cStart, dim, &user.centroid[c*dim], &user.normal[c*dim], user.vol[c]);CHKERRQ(ierr);}
     }
     ierr = PetscFree7(user.v0,user.J,user.invJ,user.detJ,user.centroid,user.normal,user.vol);CHKERRQ(ierr);
+    ierr = DMDestroy(&user.dm);CHKERRQ(ierr);
   }
   ierr = PetscFinalize();
   return 0;

File src/dm/impls/plex/examples/tests/output/ex1_7.out

 [0]: 42 ----> 1
 [0]: 43 ----> 4
 [0]: 44 ----> 5
-[0]: 45 ----> 2
+[0]: 45 ----> 3
 [0]: 45 ----> 8
-[0]: 46 ----> 3
+[0]: 46 ----> 2
 [0]: 46 ----> 9
-[0]: 47 ----> 6
+[0]: 47 ----> 7
 [0]: 47 ----> 12
-[0]: 48 ----> 7
+[0]: 48 ----> 6
 [0]: 48 ----> 13
-[0]: 49 ----> 10
-[0]: 50 ----> 11
-[0]: 51 ----> 14
-[0]: 52 ----> 15
-[0]: 53 ----> 3
-[0]: 54 ----> 0
-[0]: 55 ----> 11
-[0]: 56 ----> 8
+[0]: 49 ----> 11
+[0]: 50 ----> 10
+[0]: 51 ----> 15
+[0]: 52 ----> 14
+[0]: 53 ----> 0
+[0]: 54 ----> 3
+[0]: 55 ----> 8
+[0]: 56 ----> 11
 [0]: 57 ----> 1
-[0]: 57 ----> 7
+[0]: 57 ----> 4
 [0]: 58 ----> 2
-[0]: 58 ----> 4
+[0]: 58 ----> 7
 [0]: 59 ----> 9
-[0]: 59 ----> 15
+[0]: 59 ----> 12
 [0]: 60 ----> 10
-[0]: 60 ----> 12
+[0]: 60 ----> 15
 [0]: 61 ----> 5
 [0]: 62 ----> 6
 [0]: 63 ----> 13
 [0]: 61 (1)
 [0]: 62 (1)
 [0]: 63 (1)
-[0]: 64 (1)
+[0]: 64 (1)

File src/dm/impls/plex/examples/tests/output/ex1_8.out

 [0]: 24 ----> 1
 [0]: 25 ----> 4
 [0]: 26 ----> 5
-[0]: 27 ----> 2
-[0]: 28 ----> 3
-[0]: 29 ----> 6
-[0]: 30 ----> 7
-[0]: 31 ----> 3
-[0]: 32 ----> 0
+[0]: 27 ----> 3
+[0]: 28 ----> 2
+[0]: 29 ----> 7
+[0]: 30 ----> 6
+[0]: 31 ----> 0
+[0]: 32 ----> 3
 [0]: 33 ----> 1
-[0]: 33 ----> 7
+[0]: 33 ----> 4
 [0]: 34 ----> 2
-[0]: 34 ----> 4
+[0]: 34 ----> 7
 [0]: 35 ----> 5
 [0]: 36 ----> 6
 [0]: 37 ----> 0
 [1]: 24 ----> 1
 [1]: 25 ----> 4
 [1]: 26 ----> 5
-[1]: 27 ----> 2
-[1]: 28 ----> 3
-[1]: 29 ----> 6
-[1]: 30 ----> 7
-[1]: 31 ----> 3
-[1]: 32 ----> 0
+[1]: 27 ----> 3
+[1]: 28 ----> 2
+[1]: 29 ----> 7
+[1]: 30 ----> 6
+[1]: 31 ----> 0
+[1]: 32 ----> 3
 [1]: 33 ----> 1
-[1]: 33 ----> 7
+[1]: 33 ----> 4
 [1]: 34 ----> 2
-[1]: 34 ----> 4
+[1]: 34 ----> 7
 [1]: 35 ----> 5
 [1]: 36 ----> 6
 [1]: 37 ----> 0
   [0]    15 <- 17
   [0]    25 <- 29
   [0]    26 <- 30
-  [1] Roots referenced by my leaves, by rank
+  [1] Roots referenced by my leaves, by rank

File src/dm/impls/plex/examples/tests/output/ex7_10.out

+Mesh 'Interpolated Mesh':
+Max sizes cone: 4 support: 7
+orientation is missing
+cap --> base:
+[0]: 6 ----> 32
+[0]: 6 ----> 33
+[0]: 6 ----> 36
+[0]: 6 ----> 38
+[0]: 6 ----> 41
+[0]: 6 ----> 43
+[0]: 6 ----> 47
+[0]: 7 ----> 43
+[0]: 7 ----> 44
+[0]: 7 ----> 45
+[0]: 7 ----> 46
+[0]: 8 ----> 35
+[0]: 8 ----> 36
+[0]: 8 ----> 37
+[0]: 8 ----> 49
+[0]: 9 ----> 33
+[0]: 9 ----> 34
+[0]: 9 ----> 37
+[0]: 9 ----> 44
+[0]: 10 ----> 40
+[0]: 10 ----> 41
+[0]: 10 ----> 42
+[0]: 10 ----> 50
+[0]: 11 ----> 38
+[0]: 11 ----> 39
+[0]: 11 ----> 40
+[0]: 11 ----> 46
+[0]: 12 ----> 47
+[0]: 12 ----> 48
+[0]: 12 ----> 49
+[0]: 12 ----> 50
+[0]: 13 ----> 32
+[0]: 13 ----> 34
+[0]: 13 ----> 35
+[0]: 13 ----> 39
+[0]: 13 ----> 42
+[0]: 13 ----> 45
+[0]: 13 ----> 48
+[0]: 14 ----> 0
+[0]: 14 ----> 2
+[0]: 15 ----> 0
+[0]: 15 ----> 4
+[0]: 16 ----> 0
+[0]: 17 ----> 0
+[0]: 18 ----> 1
+[0]: 18 ----> 3
+[0]: 19 ----> 1
+[0]: 20 ----> 1
+[0]: 21 ----> 1
+[0]: 21 ----> 5
+[0]: 22 ----> 2
+[0]: 23 ----> 2
+[0]: 23 ----> 3
+[0]: 24 ----> 2
+[0]: 25 ----> 3
+[0]: 26 ----> 3
+[0]: 27 ----> 4
+[0]: 27 ----> 5
+[0]: 28 ----> 4
+[0]: 29 ----> 4
+[0]: 30 ----> 5
+[0]: 31 ----> 5
+[0]: 32 ----> 14
+[0]: 32 ----> 15
+[0]: 32 ----> 18
+[0]: 32 ----> 21
+[0]: 32 ----> 23
+[0]: 32 ----> 27
+[0]: 33 ----> 14
+[0]: 33 ----> 17
+[0]: 33 ----> 22
+[0]: 34 ----> 14
+[0]: 34 ----> 16
+[0]: 34 ----> 24
+[0]: 35 ----> 15
+[0]: 35 ----> 16
+[0]: 35 ----> 29
+[0]: 36 ----> 15
+[0]: 36 ----> 17
+[0]: 36 ----> 28
+[0]: 37 ----> 16
+[0]: 37 ----> 17
+[0]: 38 ----> 18
+[0]: 38 ----> 19
+[0]: 38 ----> 25
+[0]: 39 ----> 18
+[0]: 39 ----> 20
+[0]: 39 ----> 26
+[0]: 40 ----> 19
+[0]: 40 ----> 20
+[0]: 41 ----> 19
+[0]: 41 ----> 21
+[0]: 41 ----> 31
+[0]: 42 ----> 20
+[0]: 42 ----> 21
+[0]: 42 ----> 30
+[0]: 43 ----> 22
+[0]: 43 ----> 23
+[0]: 43 ----> 25
+[0]: 44 ----> 22
+[0]: 44 ----> 24
+[0]: 45 ----> 23
+[0]: 45 ----> 24
+[0]: 45 ----> 26
+[0]: 46 ----> 25
+[0]: 46 ----> 26
+[0]: 47 ----> 27
+[0]: 47 ----> 28
+[0]: 47 ----> 31
+[0]: 48 ----> 27
+[0]: 48 ----> 29
+[0]: 48 ----> 30
+[0]: 49 ----> 28
+[0]: 49 ----> 29
+[0]: 50 ----> 30
+[0]: 50 ----> 31
+base <-- cap:
+[0]: 0 <---- 14 (0)
+[0]: 0 <---- 15 (0)
+[0]: 0 <---- 16 (0)
+[0]: 0 <---- 17 (0)
+[0]: 1 <---- 18 (0)
+[0]: 1 <---- 19 (0)
+[0]: 1 <---- 20 (0)
+[0]: 1 <---- 21 (0)
+[0]: 2 <---- 22 (0)
+[0]: 2 <---- 23 (0)
+[0]: 2 <---- 24 (0)
+[0]: 2 <---- 14 (-2)
+[0]: 3 <---- 25 (0)
+[0]: 3 <---- 26 (0)
+[0]: 3 <---- 23 (-3)
+[0]: 3 <---- 18 (-1)
+[0]: 4 <---- 27 (0)
+[0]: 4 <---- 28 (0)
+[0]: 4 <---- 29 (0)
+[0]: 4 <---- 15 (-3)
+[0]: 5 <---- 27 (-3)
+[0]: 5 <---- 30 (0)
+[0]: 5 <---- 31 (0)
+[0]: 5 <---- 21 (-1)
+[0]: 14 <---- 32 (0)
+[0]: 14 <---- 33 (0)
+[0]: 14 <---- 34 (0)
+[0]: 15 <---- 35 (0)
+[0]: 15 <---- 36 (0)
+[0]: 15 <---- 32 (-2)
+[0]: 16 <---- 34 (-2)
+[0]: 16 <---- 37 (0)
+[0]: 16 <---- 35 (-2)
+[0]: 17 <---- 33 (-2)
+[0]: 17 <---- 36 (-2)
+[0]: 17 <---- 37 (-2)
+[0]: 18 <---- 38 (0)
+[0]: 18 <---- 32 (-2)
+[0]: 18 <---- 39 (0)
+[0]: 19 <---- 40 (0)
+[0]: 19 <---- 41 (0)
+[0]: 19 <---- 38 (-2)
+[0]: 20 <---- 39 (-2)
+[0]: 20 <---- 42 (0)
+[0]: 20 <---- 40 (-2)
+[0]: 21 <---- 32 (0)
+[0]: 21 <---- 41 (-2)
+[0]: 21 <---- 42 (-2)
+[0]: 22 <---- 43 (0)
+[0]: 22 <---- 33 (0)
+[0]: 22 <---- 44 (0)
+[0]: 23 <---- 45 (0)
+[0]: 23 <---- 32 (0)
+[0]: 23 <---- 43 (-2)
+[0]: 24 <---- 44 (-2)
+[0]: 24 <---- 34 (0)
+[0]: 24 <---- 45 (-2)
+[0]: 25 <---- 46 (0)
+[0]: 25 <---- 38 (0)
+[0]: 25 <---- 43 (-2)
+[0]: 26 <---- 45 (0)
+[0]: 26 <---- 39 (0)
+[0]: 26 <---- 46 (-2)
+[0]: 27 <---- 47 (0)
+[0]: 27 <---- 32 (-2)
+[0]: 27 <---- 48 (0)
+[0]: 28 <---- 49 (0)
+[0]: 28 <---- 36 (0)
+[0]: 28 <---- 47 (-2)
+[0]: 29 <---- 48 (-2)
+[0]: 29 <---- 35 (0)
+[0]: 29 <---- 49 (-2)
+[0]: 30 <---- 50 (0)
+[0]: 30 <---- 42 (-2)
+[0]: 30 <---- 48 (0)
+[0]: 31 <---- 47 (0)
+[0]: 31 <---- 41 (-2)
+[0]: 31 <---- 50 (-2)
+[0]: 32 <---- 13 (0)
+[0]: 32 <---- 6 (0)
+[0]: 33 <---- 6 (0)
+[0]: 33 <---- 9 (0)
+[0]: 34 <---- 9 (0)
+[0]: 34 <---- 13 (0)
+[0]: 35 <---- 13 (0)
+[0]: 35 <---- 8 (0)
+[0]: 36 <---- 8 (0)
+[0]: 36 <---- 6 (0)
+[0]: 37 <---- 9 (0)
+[0]: 37 <---- 8 (0)
+[0]: 38 <---- 11 (0)
+[0]: 38 <---- 6 (0)
+[0]: 39 <---- 13 (0)
+[0]: 39 <---- 11 (0)
+[0]: 40 <---- 11 (0)
+[0]: 40 <---- 10 (0)
+[0]: 41 <---- 10 (0)
+[0]: 41 <---- 6 (0)
+[0]: 42 <---- 13 (0)
+[0]: 42 <---- 10 (0)
+[0]: 43 <---- 7 (0)
+[0]: 43 <---- 6 (0)
+[0]: 44 <---- 9 (0)
+[0]: 44 <---- 7 (0)
+[0]: 45 <---- 7 (0)
+[0]: 45 <---- 13 (0)
+[0]: 46 <---- 7 (0)
+[0]: 46 <---- 11 (0)
+[0]: 47 <---- 12 (0)
+[0]: 47 <---- 6 (0)
+[0]: 48 <---- 13 (0)
+[0]: 48 <---- 12 (0)
+[0]: 49 <---- 12 (0)
+[0]: 49 <---- 8 (0)
+[0]: 50 <---- 12 (0)
+[0]: 50 <---- 10 (0)
+coordinates with 1 fields
+  field 0 with 3 components
+Process 0:
+  (   6) dim  3 offset   0 0 0 0
+  (   7) dim  3 offset   3 1 0 0
+  (   8) dim  3 offset   6 0 1 0
+  (   9) dim  3 offset   9 1 1 0
+  (  10) dim  3 offset  12 0 0 1
+  (  11) dim  3 offset  15 1 0 1
+  (  12) dim  3 offset  18 0 1 1
+  (  13) dim  3 offset  21 1 1 1

File src/dm/impls/plex/examples/tests/output/ex7_11.out

 [0]: 0 <---- 186 (0)
 [0]: 1 <---- 187 (0)
 [0]: 1 <---- 188 (0)
-[0]: 1 <---- 185 (-2)
+[0]: 1 <---- 185 (-1)
 [0]: 1 <---- 189 (0)
 [0]: 1 <---- 190 (0)
 [0]: 1 <---- 191 (0)
 [0]: 4 <---- 199 (-4)
 [0]: 5 <---- 207 (0)
 [0]: 5 <---- 208 (0)
-[0]: 5 <---- 205 (-2)
+[0]: 5 <---- 205 (-1)
 [0]: 5 <---- 209 (0)
 [0]: 5 <---- 210 (0)
 [0]: 5 <---- 211 (0)
 [0]: 6 <---- 212 (0)
 [0]: 6 <---- 213 (0)
-[0]: 6 <---- 206 (-2)
+[0]: 6 <---- 206 (-1)
 [0]: 6 <---- 214 (0)
 [0]: 6 <---- 215 (0)
 [0]: 6 <---- 210 (-4)
 [0]: 7 <---- 218 (0)
 [0]: 7 <---- 219 (0)
 [0]: 7 <---- 220 (0)
-[0]: 7 <---- 186 (-4)
+[0]: 7 <---- 186 (-3)
 [0]: 8 <---- 221 (0)
 [0]: 8 <---- 222 (0)
 [0]: 8 <---- 223 (0)
 [0]: 10 <---- 233 (0)
 [0]: 10 <---- 234 (0)
 [0]: 10 <---- 235 (0)
-[0]: 10 <---- 225 (-2)
-[0]: 10 <---- 231 (-4)
+[0]: 10 <---- 225 (-1)
+[0]: 10 <---- 231 (-3)
 [0]: 11 <---- 236 (0)
 [0]: 11 <---- 237 (0)
-[0]: 11 <---- 195 (-2)
+[0]: 11 <---- 195 (-1)
 [0]: 11 <---- 238 (0)
-[0]: 11 <---- 200 (-2)
+[0]: 11 <---- 200 (-1)
 [0]: 11 <---- 239 (0)
 [0]: 12 <---- 240 (0)
 [0]: 12 <---- 241 (0)
 [0]: 12 <---- 242 (0)
-[0]: 12 <---- 189 (-2)
+[0]: 12 <---- 189 (-1)
 [0]: 12 <---- 243 (0)
-[0]: 12 <---- 239 (-4)
+[0]: 12 <---- 239 (-3)
 [0]: 13 <---- 244 (0)
 [0]: 13 <---- 245 (0)
-[0]: 13 <---- 229 (-2)
-[0]: 13 <---- 215 (-2)
+[0]: 13 <---- 229 (-1)
+[0]: 13 <---- 215 (-1)
 [0]: 13 <---- 246 (0)
 [0]: 13 <---- 247 (0)
 [0]: 14 <---- 248 (0)
 [0]: 14 <---- 252 (0)
 [0]: 15 <---- 253 (0)
 [0]: 15 <---- 187 (-4)
-[0]: 15 <---- 251 (-2)
+[0]: 15 <---- 251 (-1)
 [0]: 15 <---- 254 (0)
 [0]: 15 <---- 255 (0)
 [0]: 15 <---- 256 (0)
 [0]: 18 <---- 262 (-4)
 [0]: 19 <---- 269 (0)
 [0]: 19 <---- 207 (-4)
-[0]: 19 <---- 267 (-2)
+[0]: 19 <---- 267 (-1)
 [0]: 19 <---- 270 (0)
 [0]: 19 <---- 271 (0)
 [0]: 19 <---- 272 (0)
 [0]: 20 <---- 273 (0)
 [0]: 20 <---- 212 (-4)
-[0]: 20 <---- 268 (-2)
+[0]: 20 <---- 268 (-1)
 [0]: 20 <---- 274 (0)
 [0]: 20 <---- 275 (0)
 [0]: 20 <---- 271 (-4)
 [0]: 21 <---- 277 (0)
 [0]: 21 <---- 278 (0)
 [0]: 21 <---- 279 (0)
-[0]: 21 <---- 252 (-4)
+[0]: 21 <---- 252 (-3)
 [0]: 22 <---- 280 (0)
 [0]: 22 <---- 221 (-4)
 [0]: 22 <---- 281 (0)
 [0]: 24 <---- 232 (-4)
 [0]: 24 <---- 290 (0)
 [0]: 24 <---- 291 (0)
-[0]: 24 <---- 283 (-2)
-[0]: 24 <---- 288 (-4)
+[0]: 24 <---- 283 (-1)
+[0]: 24 <---- 288 (-3)
 [0]: 25 <---- 292 (0)
 [0]: 25 <---- 236 (-4)
-[0]: 25 <---- 259 (-2)
+[0]: 25 <---- 259 (-1)
 [0]: 25 <---- 293 (0)
-[0]: 25 <---- 263 (-2)
+[0]: 25 <---- 263 (-1)
 [0]: 25 <---- 294 (0)
 [0]: 26 <---- 295 (0)
 [0]: 26 <---- 240 (-4)
 [0]: 26 <---- 296 (0)
-[0]: 26 <---- 254 (-2)
+[0]: 26 <---- 254 (-1)
 [0]: 26 <---- 297 (0)
-[0]: 26 <---- 294 (-4)
+[0]: 26 <---- 294 (-3)
 [0]: 27 <---- 298 (0)
 [0]: 27 <---- 244 (-4)
-[0]: 27 <---- 286 (-2)
-[0]: 27 <---- 275 (-2)
+[0]: 27 <---- 286 (-1)
+[0]: 27 <---- 275 (-1)
 [0]: 27 <---- 299 (0)
 [0]: 27 <---- 300 (0)
 [0]: 28 <---- 301 (0)
 [0]: 28 <---- 305 (0)
 [0]: 29 <---- 306 (0)
 [0]: 29 <---- 253 (-4)
-[0]: 29 <---- 304 (-2)
+[0]: 29 <---- 304 (-1)
 [0]: 29 <---- 307 (0)
 [0]: 29 <---- 308 (0)
 [0]: 29 <---- 309 (0)
 [0]: 32 <---- 315 (-4)
 [0]: 33 <---- 322 (0)
 [0]: 33 <---- 269 (-4)
-[0]: 33 <---- 320 (-2)
+[0]: 33 <---- 320 (-1)
 [0]: 33 <---- 323 (0)
 [0]: 33 <---- 324 (0)
 [0]: 33 <---- 325 (0)
 [0]: 34 <---- 326 (0)
 [0]: 34 <---- 273 (-4)
-[0]: 34 <---- 321 (-2)
+[0]: 34 <---- 321 (-1)
 [0]: 34 <---- 327 (0)
 [0]: 34 <---- 328 (0)
 [0]: 34 <---- 324 (-4)
 [0]: 35 <---- 330 (0)
 [0]: 35 <---- 331 (0)
 [0]: 35 <---- 332 (0)
-[0]: 35 <---- 305 (-4)
+[0]: 35 <---- 305 (-3)
 [0]: 36 <---- 333 (0)
 [0]: 36 <---- 280 (-4)
 [0]: 36 <---- 334 (0)
 [0]: 38 <---- 289 (-4)
 [0]: 38 <---- 343 (0)
 [0]: 38 <---- 344 (0)
-[0]: 38 <---- 336 (-2)
-[0]: 38 <---- 341 (-4)
+[0]: 38 <---- 336 (-1)
+[0]: 38 <---- 341 (-3)
 [0]: 39 <---- 345 (0)
 [0]: 39 <---- 292 (-4)
-[0]: 39 <---- 312 (-2)
+[0]: 39 <---- 312 (-1)
 [0]: 39 <---- 346 (0)
-[0]: 39 <---- 316 (-2)
+[0]: 39 <---- 316 (-1)
 [0]: 39 <---- 347 (0)
 [0]: 40 <---- 348 (0)
 [0]: 40 <---- 295 (-4)
 [0]: 40 <---- 349 (0)
-[0]: 40 <---- 307 (-2)
+[0]: 40 <---- 307 (-1)
 [0]: 40 <---- 350 (0)
-[0]: 40 <---- 347 (-4)
+[0]: 40 <---- 347 (-3)
 [0]: 41 <---- 351 (0)
 [0]: 41 <---- 298 (-4)
-[0]: 41 <---- 339 (-2)
-[0]: 41 <---- 328 (-2)
+[0]: 41 <---- 339 (-1)
+[0]: 41 <---- 328 (-1)
 [0]: 41 <---- 352 (0)
 [0]: 41 <---- 353 (0)
 [0]: 42 <---- 354 (0)
 [0]: 42 <---- 358 (0)
 [0]: 43 <---- 359 (0)
 [0]: 43 <---- 306 (-4)
-[0]: 43 <---- 357 (-2)
+[0]: 43 <---- 357 (-1)
 [0]: 43 <---- 360 (0)
 [0]: 43 <---- 361 (0)
 [0]: 43 <---- 362 (0)
 [0]: 46 <---- 368 (-4)
 [0]: 47 <---- 375 (0)
 [0]: 47 <---- 322 (-4)
-[0]: 47 <---- 373 (-2)
+[0]: 47 <---- 373 (-1)
 [0]: 47 <---- 376 (0)
 [0]: 47 <---- 377 (0)
 [0]: 47 <---- 378 (0)
 [0]: 48 <---- 379 (0)
 [0]: 48 <---- 326 (-4)
-[0]: 48 <---- 374 (-2)
+[0]: 48 <---- 374 (-1)
 [0]: 48 <---- 380 (0)
 [0]: 48 <---- 381 (0)
 [0]: 48 <---- 377 (-4)
 [0]: 49 <---- 383 (0)
 [0]: 49 <---- 384 (0)
 [0]: 49 <---- 385 (0)
-[0]: 49 <---- 358 (-4)
+[0]: 49 <---- 358 (-3)
 [0]: 50 <---- 386 (0)
 [0]: 50 <---- 333 (-4)
 [0]: 50 <---- 387 (0)
 [0]: 52 <---- 342 (-4)
 [0]: 52 <---- 396 (0)
 [0]: 52 <---- 397 (0)
-[0]: 52 <---- 389 (-2)
-[0]: 52 <---- 394 (-4)
+[0]: 52 <---- 389 (-1)
+[0]: 52 <---- 394 (-3)
 [0]: 53 <---- 398 (0)
 [0]: 53 <---- 345 (-4)
-[0]: 53 <---- 365 (-2)
+[0]: 53 <---- 365 (-1)
 [0]: 53 <---- 399 (0)
-[0]: 53 <---- 369 (-2)
+[0]: 53 <---- 369 (-1)
 [0]: 53 <---- 400 (0)
 [0]: 54 <---- 401 (0)
 [0]: 54 <---- 348 (-4)
 [0]: 54 <---- 402 (0)
-[0]: 54 <---- 360 (-2)
+[0]: 54 <---- 360 (-1)
 [0]: 54 <---- 403 (0)
-[0]: 54 <---- 400 (-4)
+[0]: 54 <---- 400 (-3)
 [0]: 55 <---- 404 (0)
 [0]: 55 <---- 351 (-4)
-[0]: 55 <---- 392 (-2)
-[0]: 55 <---- 381 (-2)
+[0]: 55 <---- 392 (-1)
+[0]: 55 <---- 381 (-1)
 [0]: 55 <---- 405 (0)
 [0]: 55 <---- 406 (0)
 [0]: 181 <---- 407 (0)
   ( 177) dim  3 offset 363 -0.5 -1 -1
   ( 178) dim  3 offset 366 -0.25 -0.433013 -1
   ( 179) dim  3 offset 369 1 0.5 -1
-  ( 180) dim  3 offset 372 1 1 -1
+  ( 180) dim  3 offset 372 1 1 -1

File src/dm/impls/plex/examples/tests/output/ex7_9.out

+Mesh 'Interpolated Mesh':
+Max sizes cone: 3 support: 6
+orientation is missing
+cap --> base:
+[0]: 8 ----> 17
+[0]: 8 ----> 19
+[0]: 9 ----> 17
+[0]: 9 ----> 18
+[0]: 9 ----> 23
+[0]: 9 ----> 27
+[0]: 10 ----> 24
+[0]: 10 ----> 25
+[0]: 10 ----> 27
+[0]: 11 ----> 18
+[0]: 11 ----> 19
+[0]: 11 ----> 21
+[0]: 11 ----> 22
+[0]: 12 ----> 20
+[0]: 12 ----> 22
+[0]: 12 ----> 23
+[0]: 12 ----> 24
+[0]: 12 ----> 26
+[0]: 12 ----> 31
+[0]: 13 ----> 25
+[0]: 13 ----> 26
+[0]: 13 ----> 28
+[0]: 13 ----> 29
+[0]: 14 ----> 20
+[0]: 14 ----> 21
+[0]: 14 ----> 32
+[0]: 15 ----> 28
+[0]: 15 ----> 30
+[0]: 15 ----> 31
+[0]: 15 ----> 32
+[0]: 16 ----> 29
+[0]: 16 ----> 30
+[0]: 17 ----> 0
+[0]: 18 ----> 0
+[0]: 18 ----> 2
+[0]: 19 ----> 0
+[0]: 20 ----> 1
+[0]: 20 ----> 7
+[0]: 21 ----> 1
+[0]: 22 ----> 1
+[0]: 22 ----> 2
+[0]: 23 ----> 2
+[0]: 23 ----> 4
+[0]: 24 ----> 3
+[0]: 24 ----> 4
+[0]: 25 ----> 3
+[0]: 26 ----> 3
+[0]: 26 ----> 6
+[0]: 27 ----> 4
+[0]: 28 ----> 5
+[0]: 28 ----> 6
+[0]: 29 ----> 5
+[0]: 30 ----> 5
+[0]: 31 ----> 6
+[0]: 31 ----> 7
+[0]: 32 ----> 7
+base <-- cap:
+[0]: 0 <---- 17 (0)
+[0]: 0 <---- 18 (0)
+[0]: 0 <---- 19 (0)
+[0]: 1 <---- 20 (0)
+[0]: 1 <---- 21 (0)
+[0]: 1 <---- 22 (0)
+[0]: 2 <---- 18 (-2)
+[0]: 2 <---- 23 (0)
+[0]: 2 <---- 22 (-2)
+[0]: 3 <---- 24 (0)
+[0]: 3 <---- 25 (0)
+[0]: 3 <---- 26 (0)
+[0]: 4 <---- 24 (-2)
+[0]: 4 <---- 23 (-2)
+[0]: 4 <---- 27 (0)
+[0]: 5 <---- 28 (0)
+[0]: 5 <---- 29 (0)
+[0]: 5 <---- 30 (0)
+[0]: 6 <---- 28 (-2)
+[0]: 6 <---- 31 (0)
+[0]: 6 <---- 26 (-2)
+[0]: 7 <---- 31 (-2)
+[0]: 7 <---- 32 (0)
+[0]: 7 <---- 20 (-2)
+[0]: 17 <---- 8 (0)
+[0]: 17 <---- 9 (0)
+[0]: 18 <---- 9 (0)
+[0]: 18 <---- 11 (0)
+[0]: 19 <---- 11 (0)
+[0]: 19 <---- 8 (0)
+[0]: 20 <---- 12 (0)
+[0]: 20 <---- 14 (0)
+[0]: 21 <---- 14 (0)
+[0]: 21 <---- 11 (0)
+[0]: 22 <---- 11 (0)
+[0]: 22 <---- 12 (0)
+[0]: 23 <---- 9 (0)
+[0]: 23 <---- 12 (0)
+[0]: 24 <---- 12 (0)
+[0]: 24 <---- 10 (0)
+[0]: 25 <---- 10 (0)
+[0]: 25 <---- 13 (0)
+[0]: 26 <---- 13 (0)
+[0]: 26 <---- 12 (0)
+[0]: 27 <---- 9 (0)
+[0]: 27 <---- 10 (0)
+[0]: 28 <---- 15 (0)
+[0]: 28 <---- 13 (0)
+[0]: 29 <---- 13 (0)
+[0]: 29 <---- 16 (0)
+[0]: 30 <---- 16 (0)
+[0]: 30 <---- 15 (0)
+[0]: 31 <---- 15 (0)
+[0]: 31 <---- 12 (0)
+[0]: 32 <---- 15 (0)
+[0]: 32 <---- 14 (0)
+coordinates with 1 fields
+  field 0 with 2 components
+Process 0:
+  (   8) dim  2 offset   0 0 0
+  (   9) dim  2 offset   2 0.5 0
+  (  10) dim  2 offset   4 1 0
+  (  11) dim  2 offset   6 0 0.5
+  (  12) dim  2 offset   8 0.5 0.5
+  (  13) dim  2 offset  10 1 0.5
+  (  14) dim  2 offset  12 0 1
+  (  15) dim  2 offset  14 0.5 1
+  (  16) dim  2 offset  16 1 1

File src/dm/impls/plex/plex.c

 
   PetscFunctionBegin;
   PetscValidHeaderSpecific(dm, DM_CLASSID, 1);
-  PetscValidPointer(coveredPoints, 4);
+  if (points) PetscValidIntPointer(points,3);
+  if (numCoveredPoints) PetscValidIntPointer(numCoveredPoints,4);
+  PetscValidPointer(coveredPoints, 5);
   ierr = DMRestoreWorkArray(dm, 0, PETSC_INT, (void*) coveredPoints);CHKERRQ(ierr);
+  if (numCoveredPoints) *numCoveredPoints = 0;
   PetscFunctionReturn(0);
 }
 
 
   PetscFunctionBegin;
   PetscValidHeaderSpecific(dm, DM_CLASSID, 1);
-  PetscValidPointer(coveredPoints, 4);
+  if (points) PetscValidIntPointer(points,3);
+  if (numCoveredPoints) PetscValidIntPointer(numCoveredPoints,4);
+  PetscValidPointer(coveredPoints,5);
   ierr = DMRestoreWorkArray(dm, 0, PETSC_INT, (void*) coveredPoints);CHKERRQ(ierr);
+  if (numCoveredPoints) *numCoveredPoints = 0;
   PetscFunctionReturn(0);
 }
 

File src/dm/impls/plex/plexvtk.c

     }
     for (proc = 1; proc < numProcs; ++proc) {
       PetscScalar *remoteValues;
-      PetscInt    size, d;
+      PetscInt    size = 0, d;
       MPI_Status  status;
 
       ierr = MPI_Recv(&size, 1, MPIU_INT, proc, tag, comm, &status);CHKERRQ(ierr);

File src/docs/website/download/index.html

       <h3>PETSc Release Version 3.4</h3>
       <ul>
         <li>
-          <a href="http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.4.2.tar.gz">petsc-3.4.2.tar.gz</a>
+          <a href="http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.4.3.tar.gz">petsc-3.4.3.tar.gz</a>
           - full distribution (including all current patches) with documentation
         </li>
 
         <li>
-          <a href="http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-lite-3.4.2.tar.gz">petsc-lite-3.4.2.tar.gz</a>
+          <a href="http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-lite-3.4.3.tar.gz">petsc-lite-3.4.3.tar.gz</a>
           - smaller version with no documentation (all documentation may be accessed on line)
         </li>
 

File src/ksp/pc/impls/makefile

 
 LIBBASE  = libpetscksp
 DIRS     = jacobi none sor shell bjacobi mg eisens asm ksp composite redundant spai is pbjacobi ml\
-           mat hypre tfs fieldsplit factor galerkin openmp supportgraph asa cp wb python ainvcusp sacusp bicgstabcusp\
+           mat hypre tfs fieldsplit factor galerkin openmp asa cp wb python ainvcusp sacusp bicgstabcusp\
            lsc redistribute gasm svd gamg parms bddc
 LOCDIR   = src/ksp/pc/impls/
 

File src/ksp/pc/impls/supportgraph/lowstretch.cpp

-#define PETSCKSP_DLL
-
-#include <math.h>
-#include <queue>
-#include <petsc-private/pcimpl.h>   /*I "petscpc.h" I*/
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/subgraph.hpp>
-
-using namespace boost;
-
-/*
-  Boost Graph type definitions
-*/
-
-enum edge_length_t { edge_length };
-enum edge_keep_t { edge_keep };
-enum vertex_parent_t { vertex_parent };
-enum vertex_children_t { vertex_children };
-enum vertex_depth_t { vertex_depth };
-namespace boost {
-  BOOST_INSTALL_PROPERTY(edge, length);
-  BOOST_INSTALL_PROPERTY(edge, keep);
-  BOOST_INSTALL_PROPERTY(vertex, parent);
-  BOOST_INSTALL_PROPERTY(vertex, children);
-  BOOST_INSTALL_PROPERTY(vertex, depth);
-}
-
-
-typedef property<vertex_parent_t, PetscInt, 
-                 property<vertex_children_t, std::vector<PetscInt>,
-                          property<vertex_depth_t, PetscScalar, 
-                                   property<vertex_index_t, PetscInt> > > > VertexProperty;
-typedef property<edge_length_t, PetscScalar,
-                 property<edge_keep_t, PetscBool, 
-                          property<edge_index_t, PetscInt> > >  EdgeProperty2;
-typedef property<edge_weight_t, PetscScalar, EdgeProperty2> EdgeProperty;
-// I wish I knew a better way to make a convenient edge property constructor
-#define EDGE_PROPERTY(WEIGHT,LENGTH,KEEP) EdgeProperty(WEIGHT,EdgeProperty2(LENGTH,KEEP))
-
-typedef subgraph<adjacency_list<vecS, vecS, undirectedS, VertexProperty, EdgeProperty> > Graph; 
-typedef graph_traits<Graph>::edge_descriptor Edge;
-
-typedef property_map<Graph, edge_weight_t>::type EdgeWeight;
-typedef property_map<Graph, edge_length_t>::type EdgeLength;
-typedef property_map<Graph, edge_keep_t>::type EdgeKeep;
-typedef property_map<Graph, edge_index_t>::type EdgeIndex;
-typedef property_map<Graph, vertex_parent_t>::type VertexParent;
-typedef property_map<Graph, vertex_children_t>::type VertexChildren;
-typedef property_map<Graph, vertex_depth_t>::type VertexDepth;
-
-typedef std::pair<PetscInt,PetscInt> PetscIntPair;
-struct Component {
-  //  static PetscInt next_id;
-  //static PetscInt max_id;
-
-  //PetscInt id;
-  std::vector<PetscInt> vertices; /* ordered s.t. root is first; parent precedes child */
-  /*
-  Component() {
-    id = next_id++;
-  }
-  */
-
-};
-struct ComponentPair {
-  Component *first;
-  Component *second;
-  std::vector<Edge> edges; // pointing from first to second
-  std::vector<std::pair<PetscScalar,PetscScalar> > lengthBelow;
-  std::pair<PetscScalar,PetscScalar> rootLengthBelow;
-  std::pair<PetscScalar,PetscScalar> rootCongestion;
-
-  ComponentPair() {
-    first = NULL;
-    second = NULL;
-  }
-
-  int getIndex(Component *c) {
-    if (first == c)
-      return 0;
-    else if (second == c)
-      return 1;
-    else
-      return -1;
-  }
-
-  Component* get(int i) {
-    return (i==0)?first:second;
-  }
-
-  void put(int i,Component *c) {
-    if (i==0)
-      first=c;
-    else
-      second=c;
-  }
-
-  bool match(Component *c1, Component *c2) {
-    return (first == c1 && second == c2) || (first == c2 && second == c1);
-  }
-};
-
-/* ShortestPathPriorityQueue is a priority queue in which each node (PQNode)
-   represents a potential shortest path to a vertex.  Each node stores
-   the terminal vertex, the distance along the path, and (optionally) 
-   the vertex (pred) adjacent to the terminal vertex.
-   The top node of the queue is the shortest path in the queue.
-*/
-
-struct PQNode {
-  PetscInt vertex;
-  PetscInt pred;
-  PetscReal dist;
-
-  PQNode() {}
-
-  PQNode(const PetscInt v,const PetscReal d) {
-    vertex = v;
-    dist = d;
-  }
-
-  PQNode(const PetscInt v,const PetscInt p,const PetscReal d) {
-    vertex = v;
-    pred = p;
-    dist = d;
-  }
-
-  bool operator<( const PQNode &a ) const {
-    return dist > a.dist;
-  }
-};
-typedef std::priority_queue<PQNode> ShortestPathPriorityQueue;
-
-/*
-  Function headers
-*/
-PetscErrorCode LowStretchSpanningTree(Mat mat,Mat *pre,
-                                      PetscReal tol,PetscReal& maxCong);
-PetscErrorCode AugmentedLowStretchSpanningTree(Mat mat,Mat *pre,PetscBool augment,
-                                               PetscReal tol,PetscReal& maxCong);
-PetscErrorCode LowStretchSpanningTreeHelper(Graph& g,const PetscInt root,const PetscScalar alpha,PetscInt perm[]);
-PetscErrorCode StarDecomp(const Graph g,const PetscInt root,const PetscScalar delta,const PetscScalar epsilon,
-                          PetscInt& k,std::vector<PetscInt>& size,std::vector<std::vector<PetscInt> >& idx,
-                          std::vector<PetscInt>& x,std::vector<PetscInt>& y);
-PetscErrorCode AugmentSpanningTree(Graph& g,const PetscInt root,PetscScalar& maxCong);
-PetscErrorCode DecomposeSpanningTree(Graph& g,const PetscInt root,
-                                     const PetscScalar maxInternalStretch,
-                                     const PetscScalar maxExternalWeight,
-                                     std::vector<Component*>& componentList,
-                                     std::vector<ComponentPair>& edgeComponentMap);
-PetscErrorCode DecomposeSubTree(Graph& g,const PetscInt root,
-                                const PetscScalar maxInternalStretch,
-                                const PetscScalar maxExternalWeight,
-                                std::vector<Component*>& componentList,
-                                std::vector<ComponentPair>& edgeComponentMap,
-                                Component*& currComponent,
-                                PetscScalar& currInternalStretch,
-                                PetscScalar& currExternalWeight);
-PetscErrorCode AddBridges(Graph& g,
-                          std::vector<Component*>& componentList,
-                          std::vector<ComponentPair>& edgeComponentMap,
-                          PetscScalar& maxCong);
-
-
-/* -------------------------------------------------------------------------- */
-/*
-   LowStretchSpanningTree - Applies EEST algorithm to construct 
-                            low-stretch spanning tree preconditioner
-                            
-
-   Input Parameters:
-.  mat - input matrix
-
-   Output Parameter:
-.  pre - preconditioner matrix with cholesky factorization precomputed in place
- */
-#undef __FUNCT__  
-#define __FUNCT__ "LowStretchSpanningTree"
-PetscErrorCode LowStretchSpanningTree(Mat mat,Mat *prefact,
-                                      PetscReal tol,PetscReal& maxCong)
-{
-  PetscErrorCode    ierr;
-
-  PetscFunctionBegin;
-
-  ierr = AugmentedLowStretchSpanningTree(mat,prefact,PETSC_FALSE,tol,maxCong);CHKERRQ(ierr);
-
-  PetscFunctionReturn(0);
-}
-/* -------------------------------------------------------------------------- */
-/*
-   AugmentedLowStretchSpanningTree - Applies EEST algorithm to construct 
-                                     low-stretch spanning tree preconditioner;
-                                     then augments tree with additional edges
-                            
-
-   Input Parameters:
-.  mat - input matrix
-.  augment - augmenting options
-
-   Output Parameter:
-.  pre - preconditioner matrix with cholesky factorization precomputed in place
- */
-#undef __FUNCT__  
-#define __FUNCT__ "AugmentedLowStretchSpanningTree"
-PetscErrorCode AugmentedLowStretchSpanningTree(Mat mat,Mat *prefact,PetscBool augment,
-                                               PetscReal tol,PetscReal& maxCong)
-{
-#ifndef PETSC_USE_COMPLEX
-  PetscInt          *idx;
-  PetscInt          start,end,ncols,i,j,k;
-  MatFactorInfo     info;
-  // IS                perm, iperm;
-  const PetscInt    *cols_c;
-  const PetscScalar *vals_c;
-  PetscInt          *rows, *cols, *dnz, *onz;
-  PetscScalar       *vals, *diag, absval;
-  Mat               *pre;
-  graph_traits<Graph>::out_edge_iterator e, e_end;
-  const PetscInt    root = 0;
-#endif
-  PetscInt          n;
-  PetscErrorCode    ierr;
-  PetscFunctionBegin;
-
-  ierr = MatGetSize(mat,NULL,&n);CHKERRQ(ierr);
-
-  Graph g(n);
-
-  EdgeKeep edge_keep_g = get(edge_keep_t(),g);
-
-#ifdef PETSC_USE_COMPLEX
-  SETERRQ(((PetscObject) mat)->comm, PETSC_ERR_SUP, "Complex numbers not supported for support graph PC");
-#else
-  ierr = PetscMalloc3(n,PetscScalar,&diag,n,PetscInt,&dnz,n,PetscInt,&onz);CHKERRQ(ierr);
-  ierr = PetscMemzero(dnz, n * sizeof(PetscInt));CHKERRQ(ierr);
-  ierr = PetscMemzero(onz, n * sizeof(PetscInt));CHKERRQ(ierr);
-  ierr = MatGetOwnershipRange(mat, &start, &end);CHKERRQ(ierr);
-  for (i=0; i<n; i++) {
-    ierr = MatGetRow(mat,i,&ncols,&cols_c,&vals_c);CHKERRQ(ierr);
-    diag[i] = 0;
-    for (k=0; k<ncols; k++) {
-      if (cols_c[k] == i) {
-        diag[i] += vals_c[k];
-      } else if (vals_c[k] != 0) {
-        absval = vals_c[k]>0?vals_c[k]:-vals_c[k];
-        diag[i] -= absval;
-        if (cols_c[k] > i && absval > tol) { 
-          // we set edge_weight = absval; edge_length = 1.0/absval; edge_keep = PETSC_FALSE
-          add_edge(i,cols_c[k],EDGE_PROPERTY(absval,1.0/absval,PETSC_FALSE),g);
-        }
-      }
-    }
-    ierr = MatRestoreRow(mat,i,&ncols,&cols_c,&vals_c);CHKERRQ(ierr);
-  }
-
-  ierr = PetscMalloc(n*sizeof(PetscInt),&idx);CHKERRQ(ierr);
-  put(get(vertex_depth_t(),g),root,0);
-  ierr = LowStretchSpanningTreeHelper(g,root,log(4.0/3.0)/(2.0*log((double)n)),idx);CHKERRQ(ierr);
-
-  if (augment) {
-    ierr = AugmentSpanningTree(g,root,maxCong);CHKERRQ(ierr);
-  }
-
-  pre = prefact;
-  ierr = MatCreate(PETSC_COMM_WORLD,pre);CHKERRQ(ierr);
-  ierr = MatSetSizes(*pre,PETSC_DECIDE,PETSC_DECIDE,n,n);CHKERRQ(ierr);
-  ierr = MatSetType(*pre,MATAIJ);CHKERRQ(ierr);
-
-  ierr = PetscMalloc3(1,PetscInt,&rows,n,PetscInt,&cols,n,PetscScalar,&vals);CHKERRQ(ierr);
-  for (i=0; i<n; i++) {
-    for (tie(e, e_end) = out_edges(i,g); e != e_end; e++) {
-      if (get(edge_keep_g,*e)) {
-        const PetscInt col =  target(*e,g);
-
-        if (col >= start && col < end) {
-          dnz[i]++;
-        } else {
-          onz[i]++;
-        }
-      }
-    }
-  }
-  ierr = MatSeqAIJSetPreallocation(*pre, 0, dnz);CHKERRQ(ierr);
-  ierr = MatMPIAIJSetPreallocation(*pre, 0, dnz, 0, onz);CHKERRQ(ierr);
-  for (i=0; i<n; i++) {
-    rows[0] = i;
-    k = 0;
-    for (tie(e, e_end) = out_edges(i,g); e != e_end; e++) {
-      if (get(edge_keep_g,*e)) {
-        cols[k++] = target(*e,g);
-      }
-    }
-    MatGetValues(mat,1,rows,k,cols,vals);
-    for (j=0; j<k; j++) {
-      absval = vals[j]>0?vals[j]:-vals[j];
-      diag[i] += absval;
-    }
-    cols[k] = i;
-    vals[k] = diag[i];
-    MatSetValues(*pre,1,rows,k+1,cols,vals,INSERT_VALUES);CHKERRQ(ierr);
-  }
-  ierr = PetscFree3(rows,cols,vals);CHKERRQ(ierr);
-  ierr = PetscFree3(diag,dnz,onz);CHKERRQ(ierr);
-
-  ierr = MatAssemblyBegin(*pre,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
-  ierr = MatAssemblyEnd(*pre,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
-
-  /*
-    ierr = ISCreateGeneral(PETSC_COMM_WORLD,n,idx,&perm);CHKERRQ(ierr);
-    ierr = ISSetPermutation(perm);CHKERRQ(ierr);
-    ierr = ISInvertPermutation(perm,PETSC_DECIDE,&iperm);CHKERRQ(ierr);
-    ierr = PetscFree(idx);CHKERRQ(ierr);
-    ierr = ISView(perm,PETSC_VIEWER_STDOUT_SELF);
-  */
-  IS rperm, cperm;
-  ierr = MatGetOrdering(*pre,MATORDERINGQMD,&rperm,&cperm);CHKERRQ(ierr);
-
-  ierr = MatFactorInfoInitialize(&info);CHKERRQ(ierr);
-  /*
-  ierr = MatCholeskyFactorSymbolic(*pre,iperm,&info,prefact);CHKERRQ(ierr);
-  ierr = MatCholeskyFactorNumeric(*pre,&info,prefact);CHKERRQ(ierr);
-  ierr = MatDestroy(*pre);CHKERRQ(ierr);
-  ierr = ISDestroy(perm);CHKERRQ(ierr);
-  ierr = ISDestroy(iperm);CHKERRQ(ierr);
-  */
-  ierr = MatLUFactor(*pre,rperm,cperm,&info);CHKERRQ(ierr);
-  ierr = ISDestroy(&rperm);CHKERRQ(ierr);
-  ierr = ISDestroy(&cperm);CHKERRQ(ierr);
-#endif
-  PetscFunctionReturn(0);
-}
-
-/* -------------------------------------------------------------------------- */
-/*
-   LowStretchSpanningTreeHelper
-
-   Input Parameters:
-.  g - input graph; all edges have edge_keep = PETSC_FALSE;
-                    root has vertex_depth set to distance from global root
-.  root - root vertex
-.  alpha - parameter
-.  perm - preallocated array of size num_vertices(g) in which to store vertex ordering
-
-   Output Parameter:
-.  g - edges in low-stretch spanning tree are marked with edge_keep = PETSC_TRUE;
-       also vertex_parent and vertex_children are set (vertex_parent of global root is undefined)
-       and vertex_depth is set to be distance from global root (where weight on edge is inverse distance)
-.  perm - list of vertices in which a vertex precedes its parent (with vertices referred to by global index)
- */
-#undef __FUNCT__  
-#define __FUNCT__ "LowStretchSpanningTreeHelper"
-PetscErrorCode LowStretchSpanningTreeHelper(Graph& g,const PetscInt root,const PetscScalar alpha,PetscInt perm[])
-{
-  PetscInt n,i,j,k;
-  std::vector<PetscInt> size,x,y;
-  std::vector<std::vector<PetscInt> > idx;
-  PetscErrorCode ierr;
-
-  PetscFunctionBegin;
-
-  EdgeLength edge_length_g = get(edge_length_t(),g);
-  EdgeKeep edge_keep_g = get(edge_keep_t(),g);
-  VertexParent vertex_parent_g = get(vertex_parent_t(),g);
-  VertexChildren vertex_children_g = get(vertex_children_t(),g);
-  VertexDepth vertex_depth_g = get(vertex_depth_t(),g);
-  n = num_vertices(g);
-
-  if (n > 2) {
-    ierr = StarDecomp(g,root,1.0/3,alpha,k,size,idx,x,y);CHKERRQ(ierr);
-    j = n - size[0];
-    Graph& g1 = g.create_subgraph(idx[0].begin(),idx[0].end());
-    ierr = LowStretchSpanningTreeHelper(g1,g1.global_to_local(g.local_to_global(root)),alpha,perm+j);CHKERRQ(ierr);
-    for (i=1;i<=k;i++) {
-      Edge e = edge(x[i-1],y[i-1],g).first;
-      put(edge_keep_g,e,PETSC_TRUE);
-      put(vertex_parent_g,x[i-1],g.local_to_global(y[i-1]));
-      get(vertex_children_g,y[i-1]).push_back(g.local_to_global(x[i-1]));
-      put(vertex_depth_g,x[i-1],get(vertex_depth_g,y[i-1])+get(edge_length_g,e));
-
-      j -= size[i];
-      Graph& g1 = g.create_subgraph(idx[i].begin(),idx[i].end());
-      ierr = LowStretchSpanningTreeHelper(g1,g1.global_to_local(g.local_to_global(x[i-1])),alpha,perm+j);CHKERRQ(ierr);
-    }
-  } else if (n == 2) {
-    Edge e = *(out_edges(root,g).first);
-    PetscInt t = target(e,g);
-
-    put(edge_keep_g,e,PETSC_TRUE);
-    put(vertex_parent_g,t,g.local_to_global(root));
-    get(vertex_children_g,root).push_back(g.local_to_global(t));
-    put(vertex_depth_g,t,get(vertex_depth_g,root)+get(edge_length_g,e));
-
-    perm[0] = g.local_to_global(t);
-    perm[1] = g.local_to_global(root);
-  } else /* n == 1 */ {
-    perm[0] = g.local_to_global(root);
-  }
-
-  PetscFunctionReturn(0);
-}
-
-
-
-/* -------------------------------------------------------------------------- */
-/*
-   StarDecomp - calculate a star decomposition of the graph
-
-   Input Parameters:
-.  g - input graph
-.  root - center of star decomposition
-.  delta, epsilon - parameters of star decomposition
-
-   Output Parameter:
-.  k - number of partitions, not-including central one.
-.  size[i] - number of vertices in partition i
-.  idx[i] - list of vertices in partition i; partition 0 contains root
-.  x[i-1] - "anchor" vertex of non-central partition i
-.  y[i-i] - vertex in partition 0 forming "bridge" with x[i-1]
- */
-#undef __FUNCT__  
-#define __FUNCT__ "LowStretchSpanningTreeHelper"
-PetscErrorCode StarDecomp(Graph g,const PetscInt root,const PetscScalar delta,const PetscScalar epsilon,
-                          PetscInt& k,std::vector<PetscInt>& size,std::vector<std::vector<PetscInt> >& idx,
-                          std::vector<PetscInt>& x,std::vector<PetscInt>& y)
-{
-#ifndef PETSC_USE_COMPLEX
-  PetscInt n,m,edgesLeft;
-  //PetscErrorCode ierr;
-  ShortestPathPriorityQueue pq;
-  PetscScalar radius = 0;
-  PetscInt centerSize;
-  std::vector<PetscInt> centerIdx;
-  PQNode node;
-#endif
-
-  PetscFunctionBegin;
-#ifdef PETSC_USE_COMPLEX
-  SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Complex numbers not supported for support graph PC");
-#else
-  EdgeWeight edge_weight_g = get(edge_weight_t(),g);
-  EdgeLength edge_length_g = get(edge_length_t(),g);
-  n = num_vertices(g);
-  m = num_edges(g);
-  edgesLeft = m;
-
-  std::vector<PetscInt> pred(n,-1);
-  std::vector<PetscInt> *succ = new std::vector<PetscInt>[n];
-  std::vector<PetscInt>::iterator i;
-  PetscScalar *dist = new PetscScalar[n];
-  std::vector<PetscBool> taken(n,PETSC_FALSE);
-
-  /** form tree of shortest paths to root **/
-  graph_traits<Graph>::out_edge_iterator e, e_end;  
-  for (tie(e,e_end)=out_edges(root,g); e!=e_end; e++) {
-    PetscInt t = target(*e,g);
-    pq.push(PQNode(t,root,get(edge_length_g,*e)));
-  }
-  pred[root] = root;
-  while (!pq.empty()) {
-    node = pq.top();pq.pop();
-    if (pred[node.vertex] == -1) {
-      succ[node.pred].push_back(node.vertex);
-      pred[node.vertex] = node.pred;
-      dist[node.vertex] = node.dist;
-      for (tie(e,e_end)=out_edges(node.vertex,g); e!=e_end; e++) {
-        PetscInt t = target(*e,g);
-        if (pred[t] == -1) {
-          pq.push(PQNode(t,node.vertex,node.dist+get(edge_length_g,*e)));
-        }
-      }
-      radius = node.dist;
-    }
-  }
-
-  /** BALL CUT **/
-  for (i=succ[root].begin();i!=succ[root].end();i++) {
-    pq.push(PQNode(*i,dist[*i]));
-  }
-  PetscScalar boundary = 0;
-  PetscInt edgeCount = 0;
-  centerIdx.push_back(g.local_to_global(root));
-  taken[root] = PETSC_TRUE;
-  centerSize = 1;
-  for (tie(e,e_end)=out_edges(root,g); e!=e_end; e++) {
-    boundary += get(edge_weight_g,*e);
-    edgeCount++;
-  }
-  const PetscScalar minRadius = delta*radius;
-  while (dist[pq.top().vertex] < minRadius) {
-    assert(!pq.empty());
-    node = pq.top();pq.pop();
-    centerIdx.push_back(g.local_to_global(node.vertex));
-    taken[node.vertex] = PETSC_TRUE;
-    centerSize++;
-    for (tie(e,e_end)=out_edges(node.vertex,g); e!=e_end; e++) {
-      if (taken[target(*e,g)]) {
-        boundary -= get(edge_weight_g,*e);
-      } else {
-        boundary += get(edge_weight_g,*e);
-        edgeCount++;
-      }
-    }
-    for (i=succ[node.vertex].begin();i!=succ[node.vertex].end();i++) {
-      pq.push(PQNode(*i,dist[*i]));
-    }
-  }
-  while (boundary > (edgeCount+1)*log((double)m)/(log(2.0)*(1.0-2.0*delta)*radius)) {
-    assert(!pq.empty());
-    node = pq.top();pq.pop();
-    centerIdx.push_back(g.local_to_global(node.vertex));
-    taken[node.vertex] = PETSC_TRUE;
-    centerSize++;
-    for (tie(e,e_end)=out_edges(node.vertex,g); e!=e_end; e++) {
-      if (taken[target(*e,g)]) {
-        boundary -= get(edge_weight_g,*e);
-      } else {
-        boundary += get(edge_weight_g,*e);
-        edgeCount++;
-      }
-    }
-    for (i=succ[node.vertex].begin();i!=succ[node.vertex].end();i++) {
-      pq.push(PQNode(*i,dist[*i]));
-    }
-  }
-  size.push_back(centerSize);
-  idx.push_back(centerIdx);
-  edgesLeft -= edgeCount;
-
-  k = 0;
-  assert(!pq.empty());
-  std::queue<PetscInt> anchor_q;
-  ShortestPathPriorityQueue cone_pq;
-  std::vector<PetscInt> *cone_succ = new std::vector<PetscInt>[n];
-  std::vector<PetscBool> cone_found(n,PETSC_FALSE);
-
-  /** form tree of shortest paths to an anchor **/
-  while (!pq.empty()) {
-    node = pq.top();pq.pop();
-    cone_found[node.vertex] = PETSC_TRUE;
-    anchor_q.push(node.vertex);
-    for (tie(e,e_end)=out_edges(node.vertex,g); e!=e_end; e++) {
-      PetscInt t = target(*e,g);
-      if (!taken[t]) {
-        cone_pq.push(PQNode(t,node.vertex,get(edge_length_g,*e)));
-      }
-    }
-  }
-  while (!cone_pq.empty()) {
-    node = cone_pq.top();cone_pq.pop();
-    if (!cone_found[node.vertex]) {
-      cone_succ[node.pred].push_back(node.vertex);
-      cone_found[node.vertex] = PETSC_TRUE;
-      for (tie(e,e_end)=out_edges(node.vertex,g); e!=e_end; e++) {
-        PetscInt t = target(*e,g);
-        if (!taken[t] && !cone_found[t]) {
-          cone_pq.push(PQNode(t,node.vertex,node.dist+get(edge_length_g,*e)));
-        }
-      }
-    }
-  }
-
-  while (!anchor_q.empty()) {
-    /** CONE CUT **/
-    PetscInt anchor = anchor_q.front();anchor_q.pop();
-    if (!taken[anchor]) {
-      PetscInt v;
-      PetscInt thisSize = 0;
-      std::vector<PetscInt> thisIdx;
-      std::queue<PetscInt> q;
-      ShortestPathPriorityQueue mycone_pq;
-      std::vector<PetscBool> mycone_taken(n,PETSC_FALSE);
-      PetscInt initialInternalConeEdges = 0;
-
-      boundary = 0;
-      edgeCount = 0;
-      q.push(anchor);
-      while (!q.empty()) {
-        v = q.front();q.pop();
-        taken[v] = PETSC_TRUE;
-        mycone_taken[v] = PETSC_TRUE;
-        thisIdx.push_back(g.local_to_global(v));
-        thisSize++;
-        for (i=cone_succ[v].begin();i!=cone_succ[v].end();i++) {
-          q.push(*i);
-        }
-        for (tie(e,e_end)=out_edges(v,g); e!=e_end; e++) {
-          PetscInt t = target(*e,g);
-          if (!taken[t]) {
-            mycone_pq.push(PQNode(t,v,get(edge_length_g,*e)));
-            boundary += get(edge_weight_g,*e);
-            edgeCount++;
-          } else if (mycone_taken[t]) {
-            boundary -= get(edge_weight_g,*e);
-            initialInternalConeEdges++;
-          }
-        }
-      }