[dune-pdelab] Fwd: solver fails to reset correctly after FMatrixError (singular matrix)

Shubhangi Gupta sgupta at geomar.de
Wed Jul 10 11:55:45 CEST 2019


Dear pdelab users,

I am currently experiencing a rather strange problem during parallel 
solution of my finite volume code. I have written a short outline of my 
code below for reference.

At some point during computation, if dune throws an error, the code 
catches this error, resets the solution vector to the old value, halves 
the time step size, and tries to redo the calculation (osm.apply()).

However, if I get the error "FMatrixError: matrix is singular", the 
solver seems to freeze. Even the initial defect is not shown! (See the 
terminal output below.) I am not sure why this is so, and I have not 
experienced this issue before.

I will be very thankful if someone can help me figure out a way around 
this problem.

Thanks, and warm wishes, Shubhangi


*// code layout*

     ...UG grid, generated using gmsh, GV, ...

     typedef Dune::PDELab::QkDGLocalFiniteElementMap<GV::Grid::ctype, 
double, 0, dim, Dune::PDELab::QkDGBasisPolynomial::lagrange> FEMP0;
     FEMP0 femp0;
     typedef 
Dune::PDELab::GridFunctionSpace<GV,FEMP0,Dune::PDELab::P0ParallelConstraints,Dune::PDELab::ISTL::VectorBackend<>> 
GFS0;
     GFS0 gfs0(gv,femp0);
     typedef Dune::PDELab::PowerGridFunctionSpace< GFS0,num_of_vars, 
Dune::PDELab::ISTL::VectorBackend<Dune::PDELab::ISTL::Blocking::fixed>, 
Dune::PDELab::EntityBlockedOrderingTag> GFS_TCH;

     ... LocalOperator LOP lop, TimeLocalOperator TOP top, GridOperator 
GO go, InstationaryGridOperator IGO igo, ...

     typedef Dune::PDELab::ISTLBackend_BCGS_AMG_SSOR<IGO> LS;
     LS ls(gfs,50,1,false,true);
     typedef Dune::PDELab::Newton< IGO, LS, U > PDESOLVER;
     PDESOLVER pdesolver( igo, ls );
Dune::PDELab::ImplicitEulerParameter<double> method;

     Dune::PDELab::OneStepMethod< double, IGO, PDESOLVER, U, U > osm( 
method, igo, pdesolver );

     //TIME-LOOP
     while( time < t_END - 1e-8){
             try{
                 //PDE-SOLVE
                 osm.apply( time, dt, uold, unew );
                 exceptionCaught = false;
             }catch ( Dune::Exception &e ) {
                 //RESET
                 exceptionCaught = true;
                 std::cout << "Catched Error, Dune reported error: " << 
e << std::endl;
                 unew = uold;
                 dt *= 0.5;
osm.getPDESolver().discardMatrix();
                 continue;
             }
             uold = unew;
             time += dt;
     }


*// terminal output showing FMatrixError...*


  time = 162.632 , time+dt = 164.603 , opTime = 180 , dt  : 1.97044

  READY FOR NEXT ITERATION.
_____________________________________________________
  current opcount = 2
****************************
TCH HYDRATE:
****************************
TIME STEP [implicit Euler]     89 time (from):   1.6263e+02 dt:   
1.9704e+00 time (to):   1.6460e+02
STAGE 1 time (to):   1.6460e+02.
   Initial defect:   2.1649e-01
Using a direct coarse solver (SuperLU)
Building hierarchy of 2 levels (inclusive coarse solver) took 0.2195 
seconds.
=== BiCGSTABSolver
  12.5        6.599e-11
=== rate=0.1733, T=1.152, TIT=0.09217, IT=12.5
   Newton iteration  1.  New defect:   3.4239e-02.  Reduction (this):   
1.5816e-01.  Reduction (total):   1.5816e-01
Using a direct coarse solver (SuperLU)
Building hierarchy of 2 levels (inclusive coarse solver) took 0.195 seconds.
=== BiCGSTABSolver
    17        2.402e-11
=== rate=0.2894, T=1.655, TIT=0.09738, IT=17
   Newton iteration  2.  New defect:   3.9906e+00.  Reduction (this):   
1.1655e+02.  Reduction (total):   1.8434e+01
Using a direct coarse solver (SuperLU)
Building hierarchy of 2 levels (inclusive coarse solver) took 0.8697 
seconds.
=== BiCGSTABSolver
Catched Error, Dune reported error: FMatrixError 
[luDecomposition:/home/sgupta/dune_2_6/source/dune/dune-common/dune/common/densematrix.hh:909]: 
matrix is singular
_____________________________________________________
  current opcount = 2
****************************
TCH HYDRATE:
****************************
TIME STEP [implicit Euler]     89 time (from):   1.6263e+02 dt:   
9.8522e-01 time (to):   1.6362e+02
STAGE 1 time (to):   1.6362e+02.

*... nothing happens here... the terminal appears to freeze...*



-- 
Dr. Shubhangi Gupta
Marine Geosystems
GEOMAR Helmholtz Center for Ocean Research
Wischhofstraße 1-3,
D-24148 Kiel

Room: 12-206
Phone: +49 431 600-1402
Email:sgupta at geomar.de

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.dune-project.org/pipermail/dune-pdelab/attachments/20190710/afe90eb9/attachment.htm>


More information about the dune-pdelab mailing list