From 0425e358a93e3df180e109da13d1c846f016d85b Mon Sep 17 00:00:00 2001
From: Satish Balay <balay@mcs.anl.gov>
Date: Tue, 12 Jun 2018 10:54:06 +0530
Subject: [PATCH] superlu_dist: update to version v5.4.0

diff --git a/config/BuildSystem/config/packages/SuperLU_DIST.py b/config/BuildSystem/config/packages/SuperLU_DIST.py
index cd5bd83..d8d4604 100644
--- config/BuildSystem/config/packages/SuperLU_DIST.py
+++ config/BuildSystem/config/packages/SuperLU_DIST.py
@@ -4,7 +4,7 @@ import os
 class Configure(config.package.CMakePackage):
   def __init__(self, framework):
     config.package.CMakePackage.__init__(self, framework)
-    self.gitcommit         = 'v5.3.0'
+    self.gitcommit         = 'v5.4.0'
     self.download         = ['git://https://github.com/xiaoyeli/superlu_dist','https://github.com/xiaoyeli/superlu_dist/archive/'+self.gitcommit+'.tar.gz']
     self.downloaddirnames = ['SuperLU_DIST','superlu_dist']
     self.functions        = ['set_default_options_dist']
diff --git a/src/ksp/ksp/examples/tests/ex33.c b/src/ksp/ksp/examples/tests/ex33.c
index e788c31..c5f8a35 100644
--- src/ksp/ksp/examples/tests/ex33.c
+++ src/ksp/ksp/examples/tests/ex33.c
@@ -149,13 +149,13 @@ int main(int argc,char **args)
 
     test:
       suffix: superlu_dist
-      args: -sigma 2.0 -pc_factor_mat_solver_type superlu_dist -mat_superlu_dist_rowperm NATURAL
+      args: -sigma 2.0 -pc_factor_mat_solver_type superlu_dist -mat_superlu_dist_rowperm NOROWPERM
       requires: superlu_dist !complex
       output_file: output/ex33.out
 
     test:
       suffix: superlu_dist_2
-      args: -sigma 2.0 -pc_factor_mat_solver_type superlu_dist -mat_superlu_dist_rowperm NATURAL
+      args: -sigma 2.0 -pc_factor_mat_solver_type superlu_dist -mat_superlu_dist_rowperm NOROWPERM
       requires: superlu_dist !complex
       nsize: 3
       output_file: output/ex33.out
diff --git a/src/mat/examples/tests/ex125.c b/src/mat/examples/tests/ex125.c
index 7600c5a..f78f41e 100644
--- src/mat/examples/tests/ex125.c
+++ src/mat/examples/tests/ex125.c
@@ -278,13 +278,13 @@ int main(int argc,char **args)
    test:
       suffix: superlu_dist
       requires: datafilespath !complex double !define(PETSC_USE_64BIT_INDICES) superlu_dist
-      args: -f ${DATAFILESPATH}/matrices/small -mat_solver_type 1 -mat_superlu_dist_rowperm NATURAL
+      args: -f ${DATAFILESPATH}/matrices/small -mat_solver_type 1 -mat_superlu_dist_rowperm NOROWPERM
 
    test:
       suffix: superlu_dist_2
       nsize: 3
       requires: datafilespath !complex double !define(PETSC_USE_64BIT_INDICES) superlu_dist
-      args: -f ${DATAFILESPATH}/matrices/small -mat_solver_type 1 -mat_superlu_dist_rowperm NATURAL
+      args: -f ${DATAFILESPATH}/matrices/small -mat_solver_type 1 -mat_superlu_dist_rowperm NOROWPERM
       output_file: output/ex125_superlu_dist.out
 
    test:
diff --git a/src/mat/examples/tests/ex127.c b/src/mat/examples/tests/ex127.c
index fd82322..fa1a088 100644
--- src/mat/examples/tests/ex127.c
+++ src/mat/examples/tests/ex127.c
@@ -203,6 +203,6 @@ int main(int argc,char **args)
       suffix: superlu_dist
       nsize: 3
       requires: superlu_dist
-      args: -test_choleskyfactor -mat_superlu_dist_rowperm NATURAL
+      args: -test_choleskyfactor -mat_superlu_dist_rowperm NOROWPERM
       output_file: output/ex127_superlu_dist.out
 TEST*/
diff --git a/src/mat/impls/aij/mpi/superlu_dist/superlu_dist.c b/src/mat/impls/aij/mpi/superlu_dist/superlu_dist.c
index 94cca91..98932d1 100644
--- src/mat/impls/aij/mpi/superlu_dist/superlu_dist.c
+++ src/mat/impls/aij/mpi/superlu_dist/superlu_dist.c
@@ -563,7 +563,23 @@ static PetscErrorCode MatView_Info_SuperLU_DIST(Mat A,PetscViewer viewer)
   ierr    = PetscViewerASCIIPrintf(viewer,"  Replace tiny pivots %s \n",PetscBools[options.ReplaceTinyPivot != NO]);CHKERRQ(ierr);
   ierr    = PetscViewerASCIIPrintf(viewer,"  Use iterative refinement %s \n",PetscBools[options.IterRefine == SLU_DOUBLE]);CHKERRQ(ierr);
   ierr    = PetscViewerASCIIPrintf(viewer,"  Processors in row %d col partition %d \n",lu->nprow,lu->npcol);CHKERRQ(ierr);
-  ierr    = PetscViewerASCIIPrintf(viewer,"  Row permutation %s \n",(options.RowPerm == NOROWPERM) ? "NATURAL" : "LargeDiag");CHKERRQ(ierr);
+
+  switch (options.RowPerm) {
+  case NOROWPERM:
+    ierr = PetscViewerASCIIPrintf(viewer,"  Row permutation NOROWPERM\n");CHKERRQ(ierr);
+    break;
+  case LargeDiag_MC64:
+    ierr = PetscViewerASCIIPrintf(viewer,"  Row permutation LargeDiag_MC64\n");CHKERRQ(ierr);
+    break;
+  case LargeDiag_AWPM:
+    ierr = PetscViewerASCIIPrintf(viewer,"  Row permutation LargeDiag_AWPM\n");CHKERRQ(ierr);
+    break;
+  case MY_PERMR:
+    ierr = PetscViewerASCIIPrintf(viewer,"  Row permutation MY_PERMR\n");CHKERRQ(ierr);
+    break;
+  default:
+    SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Unknown column permutation");
+  }
 
   switch (options.ColPerm) {
   case NATURAL:
@@ -626,7 +642,7 @@ static PetscErrorCode MatGetFactor_aij_superlu_dist(Mat A,MatFactorType ftype,Ma
   superlu_dist_options_t options;
   PetscBool              flg;
   const char             *colperm[]     = {"NATURAL","MMD_AT_PLUS_A","MMD_ATA","METIS_AT_PLUS_A","PARMETIS"};
-  const char             *rowperm[]     = {"LargeDiag","NATURAL"};
+  const char             *rowperm[]     = {"NOROWPERM","LargeDiag_MC64","LargeDiag_AWPM","MY_PERMR"};
   const char             *factPattern[] = {"SamePattern","SamePattern_SameRowPerm","DOFACT"};
   PetscBool              set;
 
@@ -660,7 +676,7 @@ static PetscErrorCode MatGetFactor_aij_superlu_dist(Mat A,MatFactorType ftype,Ma
      options.Equil             = YES;
      options.ParSymbFact       = NO;
      options.ColPerm           = METIS_AT_PLUS_A;
-     options.RowPerm           = LargeDiag;
+     options.RowPerm           = LargeDiag_MC64;
      options.ReplaceTinyPivot  = YES;
      options.IterRefine        = DOUBLE;
      options.Trans             = NOTRANS;
@@ -694,15 +710,23 @@ static PetscErrorCode MatGetFactor_aij_superlu_dist(Mat A,MatFactorType ftype,Ma
   ierr = PetscOptionsBool("-mat_superlu_dist_equil","Equilibrate matrix","None",options.Equil ? PETSC_TRUE : PETSC_FALSE,&flg,&set);CHKERRQ(ierr);
   if (set && !flg) options.Equil = NO;
 
-  ierr = PetscOptionsEList("-mat_superlu_dist_rowperm","Row permutation","None",rowperm,2,rowperm[0],&indx,&flg);CHKERRQ(ierr);
+  ierr = PetscOptionsEList("-mat_superlu_dist_rowperm","Row permutation","None",rowperm,4,rowperm[1],&indx,&flg);CHKERRQ(ierr);
   if (flg) {
     switch (indx) {
     case 0:
-      options.RowPerm = LargeDiag;
+      options.RowPerm = NOROWPERM;
       break;
     case 1:
-      options.RowPerm = NOROWPERM;
+      options.RowPerm = LargeDiag_MC64;
+      break;
+    case 2:
+      options.RowPerm = LargeDiag_AWPM;
       break;
+    case 3:
+      options.RowPerm = MY_PERMR;
+      break;
+    default:
+      SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Unknown row permutation");
     }
   }
 
@@ -815,7 +839,7 @@ PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void)
 . -mat_superlu_dist_c <n> - number of columns in processor partition
 . -mat_superlu_dist_matinput <0,1> - matrix input mode; 0=global, 1=distributed
 . -mat_superlu_dist_equil - equilibrate the matrix
-. -mat_superlu_dist_rowperm <LargeDiag,NATURAL> - row permutation
+. -mat_superlu_dist_rowperm <NOROWPERM,LargeDiag_MC64,LargeDiag_AWPM,MY_PERMR> - row permutation
 . -mat_superlu_dist_colperm <MMD_AT_PLUS_A,MMD_ATA,NATURAL> - column permutation
 . -mat_superlu_dist_replacetinypivot - replace tiny pivots
 . -mat_superlu_dist_fact <SamePattern> - (choose one of) SamePattern SamePattern_SameRowPerm DOFACT
-- 
2.10.5