Skip to content

Commit

Permalink
Updated code for petsc version 3.6.3
Browse files Browse the repository at this point in the history
1. Changing KspSetNullspace with MatSetNullspace.
2. Updated FindPETSc.cmake to the changes made in 3.6.xx
3. Use findpetsc.cmake present in the project directory itself instead of
the one present in home directory.
  • Loading branch information
bishesh committed Dec 8, 2015
1 parent 9a570da commit f9dade1
Show file tree
Hide file tree
Showing 8 changed files with 310 additions and 305 deletions.
5 changes: 3 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ else(IS_CLUSTER)
set(ITK_DIR ${MY_HOME}/Documents/softwares/ITK-build)
message("setting up for delorme")
endif(IS_CLUSTER)

MESSAGE("The directory is: ${CMAKE_SOURCE_DIR}")
#add cmake modules path to the default one:
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${MY_HOME}/cmakeModules/petsc")
#set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${MY_HOME}/cmakeModules/petsc")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules")

#Find the external library for Petsc
find_package(PETSc COMPONENTS CXX REQUIRED)
Expand Down
540 changes: 261 additions & 279 deletions cmake/Modules/FindPETSc.cmake

Large diffs are not rendered by default.

8 changes: 5 additions & 3 deletions configFiles/petsc_ops_gamg_detailedSummary
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@
# This is also a comment line
-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_precondition self
-pc_fieldsplit_dm_splits 0 -pc_fieldsplit_0_fields 0,1,2 -pc_fieldsplit_1_fields 3
-fieldsplit_0_pc_type gamg
-fieldsplit_0_pc_type gamg -fieldsplit_0_pc_mg_levels_pc_type jacobi
#-fieldsplit_0_mg_coarse_pc_type svd -fieldsplit_0_mg_coarse_sub_pc_type ?
#monitor options
#-fieldsplit_0_ksp_converged_reason
#-fieldsplit_0_ksp_max_it 100
-fieldsplit_1_ksp_converged_reason -ksp_converged_reason
#-fieldsplit_1_ksp_max_it 3 -ksp_max_it 3 -ksp_rtol 1.0e-8 -ksp_monitor_true_residual
-fieldsplit_1_ksp_monitor_true_residual -ksp_monitor_true_residual
#-fieldsplit_1_ksp_max_it 3 -ksp_max_it 3 -ksp_rtol 1.0e-8
#-fieldsplit_1_ksp_monitor_true_residual -ksp_monitor_true_residual
-fieldsplit_1_ksp_monitor -ksp_monitor
#-log_summary -ksp_view
6 changes: 4 additions & 2 deletions configFiles/petsc_ops_hypre_detailedSummary
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,7 @@
#-fieldsplit_0_ksp_converged_reason
#-fieldsplit_0_ksp_max_it 100
-fieldsplit_1_ksp_converged_reason -ksp_converged_reason
#-fieldsplit_1_ksp_max_it 3 -ksp_max_it 3 -ksp_rtol 1.0e-8 -ksp_monitor_true_residual
-fieldsplit_1_ksp_monitor_true_residual -ksp_monitor_true_residual -log_summary -ksp_view
#-fieldsplit_1_ksp_max_it 3 -ksp_max_it 3 -ksp_rtol 1.0e-8
#-fieldsplit_1_ksp_monitor_true_residual -ksp_monitor_true_residual
-fieldsplit_1_ksp_monitor -ksp_monitor
-log_summary -ksp_view
6 changes: 4 additions & 2 deletions configFiles/petsc_ops_hypre_notDetailedSummary
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,7 @@
#-fieldsplit_0_ksp_converged_reason
#-fieldsplit_0_ksp_max_it 100
#-fieldsplit_1_ksp_converged_reason -ksp_converged_reason
#-fieldsplit_1_ksp_max_it 3 -ksp_max_it 3 -ksp_rtol 1.0e-8 -ksp_monitor_true_residual
#-fieldsplit_1_ksp_monitor_true_residual -ksp_monitor_true_residual -log_summary -ksp_view
#-fieldsplit_1_ksp_max_it 3 -ksp_max_it 3 -ksp_rtol 1.0e-8
#-fieldsplit_1_ksp_monitor_true_residual -ksp_monitor_true_residual
#-fieldsplit_1_ksp_monitor_true_residual -ksp_monitor_true_residual
#-log_summary -ksp_view
13 changes: 13 additions & 0 deletions configFiles/petsc_ops_lu
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Comment line starts with '#'
# This is also a comment line
-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_precondition self
-pc_fieldsplit_dm_splits 0 -pc_fieldsplit_0_fields 0,1,2 -pc_fieldsplit_1_fields 3
-fieldsplit_0_pc_type lu -fieldsplit_1_ksp_rtol 1.0e-10
#monitor options
#-fieldsplit_0_ksp_converged_reason
#-fieldsplit_0_ksp_max_it 100
-fieldsplit_1_ksp_converged_reason -ksp_converged_reason
#-fieldsplit_1_ksp_max_it 3 -ksp_max_it 3 -ksp_rtol 1.0e-8
#-fieldsplit_1_ksp_monitor_true_residual -ksp_monitor_true_residual
#-fieldsplit_1_ksp_monitor -ksp_monitor
#-log_summary -ksp_view
1 change: 1 addition & 0 deletions src/PetscAdLemMain.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ int opsParser(UserOptions &ops) {
ierr = PetscOptionsGetString(NULL,"-boundary_condition",optionString,PETSC_MAX_PATH_LEN,&optionFlag);CHKERRQ(ierr);
if(!optionFlag) throw "Must provide a valid boundary condition. e.g. dirichlet_at_skull";
ops.boundaryCondition = optionString;

ierr = PetscOptionsGetString(NULL,"--relax_ic_in_csf",optionString,PETSC_MAX_PATH_LEN,&optionFlag);CHKERRQ(ierr);
ops.relaxIcInCsf = (bool)optionFlag;

Expand Down
36 changes: 19 additions & 17 deletions src/PetscAdLemTaras3D.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -233,24 +233,24 @@ PetscErrorCode PetscAdLemTaras3D::solveModel(bool operatorChanged)
ierr = DMKSPSetComputeOperators(mDa,computeMatrixTaras3d,this);CHKERRQ(ierr);
ierr = DMKSPSetComputeRHS(mDa,computeRHSTaras3d,this);CHKERRQ(ierr);
}
if(mPressureNullspacePresent) {
ierr = KSPSetNullSpace(mKsp,mNullSpace);CHKERRQ(ierr);//nullSpace for the main system
}
ierr = KSPSetFromOptions(mKsp);CHKERRQ(ierr);
ierr = KSPSetUp(mKsp);CHKERRQ(ierr); //register the fieldsplits obtained from options.

ierr = KSPGetOperators(mKsp,&mA,NULL);CHKERRQ(ierr);
ierr = KSPGetPC(mKsp,&mPc);CHKERRQ(ierr);

PetscBool isNull;
ierr = KSPSetUp(mKsp);CHKERRQ(ierr); //register the fieldsplits obtained from options.
// ---------- MUST CALL kspsetfromoptions() and kspsetup() before kspgetoperators and matsetnullspace
// otherwise I'm getting a runtime error of mat object type not set (for mA!!)
ierr = KSPGetOperators(mKsp,&mA,NULL);CHKERRQ(ierr);
if(mPressureNullspacePresent) {
ierr = MatNullSpaceTest(mNullSpace,mA,&isNull);CHKERRQ(ierr);
if(!isNull) { //FIXME: Must correct this for skull zero boundary condition!
//SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_PLIB,"not a valid system null space \n");
PetscSynchronizedPrintf(PETSC_COMM_WORLD,"\n WARNING: not a valid system null space\n");
//ierr = KSPSetNullSpace(mKsp,mNullSpace);CHKERRQ(ierr);//nullSpace for the main system
ierr = MatSetNullSpace(mA,mNullSpace);CHKERRQ(ierr);//nullSpace for the main system, updated for petsc3.6
PetscBool isNull;
if(mPressureNullspacePresent) {
ierr = MatNullSpaceTest(mNullSpace,mA,&isNull);CHKERRQ(ierr);
if(!isNull) { //FIXME: Must correct this for skull zero boundary condition!
//SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_PLIB,"not a valid system null space \n");
PetscSynchronizedPrintf(PETSC_COMM_WORLD,"\n WARNING: not a valid system null space\n");
}
}

}
}
ierr = KSPGetPC(mKsp,&mPc);CHKERRQ(ierr);

//Setting up of null spaces and near null spaces for fieldsplits depend upon the kinds of options user have used.
PetscBool optionFlag = PETSC_FALSE;
Expand Down Expand Up @@ -288,11 +288,13 @@ PetscErrorCode PetscAdLemTaras3D::solveModel(bool operatorChanged)
ierr = MatNullSpaceDestroy(&rigidBodyModes);CHKERRQ(ierr);
}

//If constant pressure nullspace present, set it to SchurComplement ksp.
//If constant pressure nullspace present, set it to SchurComplement matrix.
if(mPressureNullspacePresent) {
ierr = KSPSetNullSpace(subKsp[1],mNullSpaceP);CHKERRQ(ierr);
PetscBool isNull;
Mat matSc;
ierr = KSPGetOperators(subKsp[1],&matSc,NULL);CHKERRQ(ierr);
//ierr = KSPSetNullSpace(subKsp[1],mNullSpaceP);CHKERRQ(ierr); //no longer used in petsc 3.6
ierr = MatSetNullSpace(matSc,mNullSpaceP);CHKERRQ(ierr); //petsc 3.6 update
ierr = MatNullSpaceTest(mNullSpaceP,matSc,&isNull);
if(!isNull) {//FIXME: Must correct this for skull zero boundary condition!
//SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_PLIB,"not a valid pressure null space \n");
Expand Down

0 comments on commit f9dade1

Please sign in to comment.