> On Oct 25, 2016, at 5:39 PM, Olivier Mesnard <olivier.mesna...@gmail.com> 
> wrote:
> 
> On 25 October 2016 at 17:51, Barry Smith <bsm...@mcs.anl.gov> wrote:
> 
>   Olivier,
> 
>     In theory you do not need to change anything else. Are you using a 
> different matrix object for the velocity_ksp object than the poisson_ksp 
> object?
> 
> ​The matrix is different for the velocity_ksp and the poisson_ksp​.
>  
>     The code change in PETSc is very little but we have a report from another 
> CFD user who also had problems with the change so there may be some subtle 
> bug that we can't figure out causing things to not behave properly.
> 
>    First run the 3.7.4 code with -poisson_ksp_view and verify that when it 
> prints the matrix information it prints something like has attached null 
> space if it does not print that it means that somehow the matrix is not 
> properly getting the matrix attached.
> 
> ​When running with 3.7.4 and -poisson_ksp_view, the output shows that the 
> nullspace is not attached to the KSP (as it was with 3.5.4)​; however the 
> print statement is now under the Mat info (which is expected when moving from 
> KSPSetNullSpace to MatSetNullSpace?).

   Good, this is how it should be.
> 
>     Though older versions had MatSetNullSpace() they didn't necessarily 
> associate it with the KSP so it was not expected to work as a replacement for 
> KSPSetNullSpace() with older versions.
> 
>     Because our other user had great difficulty trying to debug the issue 
> feel free to send us at petsc-ma...@mcs.anl.gov your code with instructions 
> on building and running and we can try to track down the problem. Better than 
> hours and hours spent with fruitless email. We will, of course, not 
> distribute the code and will delete in when we are finished with it.
> 
> ​The code is open-source and hosted on GitHub 
> (https://github.com/barbagroup/PetIBM)​.
> I just pushed the branches `feature-compatible-petsc-3.7` and 
> `revert-compatible-petsc-3.5` that I used to observe this problem.
> 
    Thanks, I'll get back to you if I discover anything



> PETSc (both 3.5.4 and 3.7.4) was configured as follow:
> export PETSC_ARCH="linux-gnu-dbg"
> ./configure --PETSC_ARCH=$PETSC_ARCH \
>       --with-cc=gcc \
>       --with-cxx=g++ \
>       --with-fc=gfortran \
>       --COPTFLAGS="-O0" \
>       --CXXOPTFLAGS="-O0" \
>       --FOPTFLAGS="-O0" \
>       --with-debugging=1 \
>       --download-fblaslapack \
>       --download-mpich \
>       --download-hypre \
>       --download-yaml \
>       --with-x=1
> 
> Our code was built using the following commands:​
> mkdir petibm-build
> cd petibm-build
> ​export PETSC_DIR=<directory of PETSc>
> export PETSC_ARCH="linux-gnu-dbg"
> export PETIBM_DIR=<directory of PetIBM git repo>
> $PETIBM_DIR/configure --prefix=$PWD \
>       CXX=$PETSC_DIR/$PETSC_ARCH/bin/mpicxx \
>       CXXFLAGS="-g -O0 -std=c++11"​
> make all
> make install
> 
> ​Then
> cd examples
> make examples​
> 
> ​The example of the lid-driven cavity I was talking about can be found in the 
> folder `examples/2d/convergence/lidDrivenCavity20/20/`​
> 
> To run it:
> mpiexec -n N <path-to-petibm-build>/bin/petibm2d -directory <path-to-example>
> 
> Let me know if you need more info. Thank you.
> 
>    Barry
> 
> 
> 
> 
> 
> 
> 
> 
> > On Oct 25, 2016, at 4:38 PM, Olivier Mesnard <olivier.mesna...@gmail.com> 
> > wrote:
> >
> > Hi all,
> >
> > We develop a CFD code using the PETSc library that solves the Navier-Stokes 
> > equations using the fractional-step method from Perot (1993).
> > At each time-step, we solve two systems: one for the velocity field, the 
> > other, a Poisson system, for the pressure field.
> > One of our test-cases is a 2D lid-driven cavity flow (Re=100) on a 20x20 
> > grid using 1 or 2 procs.
> > For the Poisson system, we usually use CG preconditioned with GAMG.
> >
> > So far, we have been using PETSc-3.5.4, and we would like to update the 
> > code with the latest release: 3.7.4.
> >
> > As suggested in the changelog of 3.6, we replaced the routine 
> > `KSPSetNullSpace()` with `MatSetNullSpace()`.
> >
> > Here is the list of options we use to configure the two solvers:
> > * Velocity solver: prefix `-velocity_`
> >   -velocity_ksp_type bcgs
> >   -velocity_ksp_rtol 1.0E-08
> >   -velocity_ksp_atol 0.0
> >   -velocity_ksp_max_it 10000
> >   -velocity_pc_type jacobi
> >   -velocity_ksp_view
> >   -velocity_ksp_monitor_true_residual
> >   -velocity_ksp_converged_reason
> > * Poisson solver: prefix `-poisson_`
> >   -poisson_ksp_type cg
> >   -poisson_ksp_rtol 1.0E-08
> >   -poisson_ksp_atol 0.0
> >   -poisson_ksp_max_it 20000
> >   -poisson_pc_type gamg
> >   -poisson_pc_gamg_type agg
> >   -poisson_pc_gamg_agg_nsmooths 1
> >   -poissonksp_view
> >   -poisson_ksp_monitor_true_residual
> >   -poisson_ksp_converged_reason
> >
> > With 3.5.4, the case runs normally on 1 or 2 procs.
> > With 3.7.4, the case runs normally on 1 proc but not on 2.
> > Why? The Poisson solver diverges because of an indefinite preconditioner 
> > (only with 2 procs).
> >
> > We also saw that the routine `MatSetNullSpace()` was already available in 
> > 3.5.4.
> > With 3.5.4, replacing `KSPSetNullSpace()` with `MatSetNullSpace()` led to 
> > the Poisson solver diverging because of an indefinite matrix (on 1 and 2 
> > procs).
> >
> > Thus, we were wondering if we needed to update something else for the KSP, 
> > and not just modifying the name of the routine?
> >
> > I have attached the output files from the different cases:
> > * `run-petsc-3.5.4-n1.log` (3.5.4, `KSPSetNullSpace()`, n=1)
> > * `run-petsc-3.5.4-n2.log`
> > * `run-petsc-3.5.4-nsp-n1.log` (3.5.4, `MatSetNullSpace()`, n=1)
> > * `run-petsc-3.5.4-nsp-n2.log`
> > * `run-petsc-3.7.4-n1.log` (3.7.4, `MatSetNullSpace()`, n=1)
> > * `run-petsc-3.7.4-n2.log`
> >
> > Thank you for your help,
> > Olivier
> > <run-petsc-3.5.4-n1.log><run-petsc-3.5.4-n2.log><run-petsc-3.5.4-nsp-n1.log><run-petsc-3.5.4-nsp-n2.log><run-petsc-3.7.4-n1.log><run-petsc-3.7.4-n2.log>
> 
> 

Reply via email to