<div dir="ltr"><span style="font-size:12.8px">Hi, all,</span><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">I wrote a code as following:</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><div>void petsc_solve_thm2d(type_matrix_petsc *matrix)</div><div>{</div><div>  IS isg[4],iss,isf;</div><div>  MSGS("[petsc] Set blocked preconditioner index");</div><div>  </div><div>  PetscScalar np_Sv=matrix->np_col/3;</div><div>  PetscScalar np_Sp=matrix->np_col/6;</div><div>  PetscScalar np_Fv=matrix->np_col/3;</div><div>  PetscScalar np_Fp=matrix->np_col/6;</div><div><br></div><div>  ISCreateStride(PETSC_COMM_SELF,np_Sv,0,1,&isg[0]);</div><div>  ISCreateStride(PETSC_COMM_SELF,np_Sp,np_Sv,1,&isg[1]);</div><div>  ISCreateStride(PETSC_COMM_SELF,np_Fv,np_Sv+np_Sp,1,&isg[2]);</div><div>  ISCreateStride(PETSC_COMM_SELF,np_Fp,np_Sv+np_Sp+np_Fv,1,&isg[3]);</div><div><br></div><div>  IS is_solid[]={isg[0],isg[1]};</div><div>  IS is_fluid[]={isg[2],isg[3]};</div><div><br></div><div>  ierr = ISConcatenate(PETSC_COMM_SELF,2,is_solid,&iss);CHKERRV(ierr);</div><div>  ierr = ISConcatenate(PETSC_COMM_SELF,2,is_fluid,&isf);CHKERRV(ierr);</div><div><br></div><div>  MSGS("[petsc] Create solver");</div><div>  ierr = KSPCreate(PETSC_COMM_SELF,&matrix->ksp);CHKERRV(ierr);</div><div>  ierr = KSPSetOptionsPrefix(matrix->ksp,"thm_");CHKERRV(ierr);</div><div>  ierr = KSPSetOperators(matrix->ksp,matrix->LHS,matrix->LHS);CHKERRV(ierr);</div><div>  ierr = KSPSetFromOptions(matrix->ksp);CHKERRV(ierr);</div><div>  ierr = KSPGetPC(matrix->ksp,&matrix->pc);CHKERRV(ierr);</div><div><br></div><div>//  ierr = PCFieldSplitSetIS(matrix->pc,"Sv",isg[0]);CHKERRV(ierr);</div><div>//  ierr = PCFieldSplitSetIS(matrix->pc,"Sp",isg[1]);CHKERRV(ierr);</div><div>//  ierr = PCFieldSplitSetIS(matrix->pc,"Fv",isg[2]);CHKERRV(ierr);</div><div>//  ierr = PCFieldSplitSetIS(matrix->pc,"Fp",isg[3]);CHKERRV(ierr);</div><div><br></div><div>  ierr = PCFieldSplitSetIS(matrix->pc,"S",iss);CHKERRV(ierr);</div><div>  ierr = PCFieldSplitSetIS(matrix->pc,"F",isf);CHKERRV(ierr);</div><div>  </div><div>  //ierr = PCFieldSplitSetBlockSize(matrix->pc,4);CHKERRV(ierr);</div><div><br></div><div>  MSGS("[petsc] Solving");</div><div>  ierr = KSPSolve(matrix->ksp,matrix->RHS,matrix->SOL);CHKERRV(ierr);</div><div><br></div><div>  MSGS("[petsc] Destroy solver");</div><div>  ierr = KSPDestroy(&matrix->ksp);CHKERRV(ierr);</div><div>  ierr = ISDestroy(&isg);CHKERRV(ierr);</div><div>}</div></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">then I can call petsc in the command line as:</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">./thm2d_nonuniform  -thm_ksp_monitor -thm_ksp_view -thm_ksp_type fgmres -thm_ksp_rtol 1e-10 -thm_pc_type fieldsplit  -thm_pc_fieldsplit_type schur -thm_pc_fieldsplit_S_ksp_type fgmres -thm_fieldsplit_S_pc_type lu -thm_pc_fieldsplit_F_ksp_type fgmres  -thm_fieldsplit_F_pc_type lu -thm_fieldsplit_S_pc_factor_mat_solver_package umfpack </div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">this command is working. but I also want to set  -thm_fieldsplit_S_pc_type using fieldsplit schur preconditioner. Is there a solution to do something like:</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">-thm_fieldsplit_S_pc_type fieldsplit -thm_fieldsplit_S_pc_field_type schur -thm_fieldsplit_S_fieldsplit_Sv_ksp_type xxx -thm_fieldsplit_S_fieldsplit_Sp_ksp_type xxx -thm_fieldsplit_S_fieldsplit_Sv_pc_type xxx -<br></div><div style="font-size:12.8px">thm_fieldsplit_S_fieldsplit_Sp_pc_type xxx <br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Thanks a lot ~ </div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Cheers,</div><div style="font-size:12.8px">Larry</div></div>