> On Nov 21, 2014, at 2:53 PM, paul zhang <[email protected]> wrote: > > Hi Barry, > > Thanks for your checking. I know it for the first problem. > For the second, I am not quite sure how to use those flags though. I have > compile all of my source code to a binary, say CFDsolver. Then as I use it, > I do > > $ mpirun -np 16 ../CFDsolver case_file
mpirun -np 16 ../CFDsolver case_file -ksp_type bcgs -pc_type jacobi -ksp_view for example > > What am I supposed to do? > > Thanks, > Paul > > > > > > > > > > > On Fri, Nov 21, 2014 at 12:39 PM, Barry Smith <[email protected]> wrote: > > You need to call KSPGetPC(ksp,&pc); before setting the pc > > Note that since you call KSPSetFromOptions(ksp); you can control the KSP's > and PC's from the command line and don't need to edit the code and recompile > it for each change to the KSP or PC. For example > > -ksp_type bcgs -pc_type jacobi > > Barry > > > On Nov 21, 2014, at 8:18 AM, huaibao zhang <[email protected]> wrote: > > > > Hi Jed, > > > > I have a specific question regarding the attached my initialization > > function. Previously I used KSPSetType(ksp,KSPFGMRES) solver, and I would > > like to see if there is some improvement using the other choices like > > KSPBCGS. It seems hoverer, the PC //PCSetType(pc,PCBJACOBI) does > > not work with me. And I am not quite sure why. > > > > By the way, can you please give some suggestions on my code? I am not quite > > sure if I am doing the things rightly. > > > > > > Many thanks, > > Paul > > > > > > > > > > void petsc_init(void) { > > > > vector<Cell>::iterator cit; > > vector<int>::iterator it; > > > > //Create nonlinear solver context > > KSPCreate(PETSC_COMM_WORLD,&ksp); > > > > > > VecCreateMPI(PETSC_COMM_WORLD,grid[gid].cellCount*nVars,grid[gid].globalCellCount*nVars,&RHS); > > VecSetFromOptions(RHS); > > VecDuplicate(RHS,&deltaX); > > > > > > VecSet(RHS,0.); > > VecSet(deltaX,0.); > > > > vector<int> diagonal_nonzeros, off_diagonal_nonzeros; > > int nextCellCount; > > > > // Calculate space necessary for matrix memory allocation > > for (cit=grid[gid].cell.begin();cit!=grid[gid].cell.end();cit++) { > > nextCellCount=0; > > for (it=(*cit).faces.begin();it!=(*cit).faces.end();it++) { > > if (grid[gid].face[*it].bc==INTERNAL_FACE) { > > nextCellCount++; > > } > > } > > for (int i=0;i<nVars;++i) { > > diagonal_nonzeros.push_back( > > (nextCellCount+1)*nVars); > > off_diagonal_nonzeros.push_back( > > ((*cit).ghosts.size())*nVars); > > } > > } > > > > MatCreateMPIAIJ( > > PETSC_COMM_WORLD, > > grid[gid].cellCount*nVars, > > grid[gid].cellCount*nVars, > > grid[gid].globalCellCount*nVars, > > grid[gid].globalCellCount*nVars, > > 0,&diagonal_nonzeros[0], > > 0,&off_diagonal_nonzeros[0], > > &impOP); > > > > KSPSetOperators(ksp,impOP,impOP,SAME_NONZERO_PATTERN); > > > > KSPSetTolerances(ksp,rtol,abstol,1.e15,maxits); > > KSPSetType(ksp, KSPBCGS); > > //PCSetType(pc,PCBJACOBI); > > KSPGMRESSetRestart(ksp,30); > > KSPSetFromOptions(ksp); > > > > return; > > } > > > > > -- > Huaibao (Paul) Zhang > Gas Surface Interactions Lab > Department of Mechanical Engineering > University of Kentucky, > Lexington, > KY, 40506-0503 > Office: 216 Ralph G. Anderson Building > Web:gsil.engineering.uky.edu
