> 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

Reply via email to