/[escript]/branches/trilinos_from_5897/paso/src/Options.cpp
ViewVC logotype

Diff of /branches/trilinos_from_5897/paso/src/Options.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 5932 by caltinay, Fri Feb 5 03:37:49 2016 UTC revision 5933 by caltinay, Wed Feb 17 23:53:30 2016 UTC
# Line 25  Line 25 
25  /*   author: l.gross@uq.edu.au */  /*   author: l.gross@uq.edu.au */
26    
27  /****************************************************************************/  /****************************************************************************/
 #include <iostream>  
 #include "Paso.h"  
28  #include "Options.h"  #include "Options.h"
29    #include "Paso.h"
30    #include "PasoException.h"
31    
32    #include <escript/SolverOptions.h>
33    
34    #include <boost/python/extract.hpp>
35    #include <iostream>
36    #include <sstream>
37    
38    namespace bp = boost::python;
39    
40  namespace paso {  namespace paso {
41    
42    Options::Options(const bp::object& options)
43    {
44        escript::SolverBuddy sb = bp::extract<escript::SolverBuddy>(options);
45    
46        setDefaults();
47        method = mapEscriptOption(sb.getSolverMethod());
48        package = mapEscriptOption(sb.getPackage());
49        verbose = sb.isVerbose();
50        symmetric = sb.isSymmetric();
51        tolerance = sb.getTolerance();
52        absolute_tolerance = sb.getAbsoluteTolerance();
53        inner_tolerance = sb.getInnerTolerance();
54        adapt_inner_tolerance = sb.adaptInnerTolerance();
55        reordering = mapEscriptOption(sb.getReordering());
56        preconditioner = mapEscriptOption(sb.getPreconditioner());
57        ode_solver = mapEscriptOption(sb.getODESolver());
58        iter_max = sb.getIterMax();
59        inner_iter_max = sb.getInnerIterMax();
60        drop_tolerance = sb.getDropTolerance();
61        drop_storage = sb.getDropStorage();
62        truncation = sb.getTruncation();
63        restart = sb._getRestartForC();
64        sweeps = sb.getNumSweeps();
65        pre_sweeps = sb.getNumPreSweeps();
66        post_sweeps = sb.getNumPostSweeps();
67        level_max = sb.getLevelMax();
68        min_coarse_matrix_size = sb.getMinCoarseMatrixSize();
69        coarsening_threshold = sb.getCoarseningThreshold();
70        accept_failed_convergence = sb.acceptConvergenceFailure();
71        coarsening_method = mapEscriptOption(sb.getCoarsening());
72        smoother = mapEscriptOption(sb.getSmoother());
73        relaxation_factor = sb.getRelaxationFactor();
74        use_local_preconditioner = sb.useLocalPreconditioner();
75        min_coarse_sparsity = sb.getMinCoarseMatrixSparsity();
76        refinements = sb.getNumRefinements();
77        coarse_matrix_refinements = sb.getNumCoarseMatrixRefinements();
78        usePanel = sb.usePanel();
79        interpolation_method = sb.getAMGInterpolation();
80        diagonal_dominance_threshold = sb.getDiagonalDominanceThreshold();
81    }
82    
83  void Options::setDefaults()  void Options::setDefaults()
84  {  {
85      verbose = false;      verbose = false;
# Line 370  int Options::getPackage(int solver, int Line 419  int Options::getPackage(int solver, int
419      return out;      return out;
420  }  }
421    
422    int Options::mapEscriptOption(int escriptOption)
423    {
424        switch (escriptOption) {
425            case escript::SO_DEFAULT:
426                return PASO_DEFAULT;
427    
428            case escript::SO_PACKAGE_MKL:
429                return PASO_MKL;
430            case escript::SO_PACKAGE_PASO:
431                return PASO_PASO;
432            case escript::SO_PACKAGE_PASTIX:
433                return PASO_PASTIX;
434            case escript::SO_PACKAGE_SUPER_LU:
435                return PASO_SUPER_LU;
436            case escript::SO_PACKAGE_TRILINOS:
437                return PASO_TRILINOS;
438            case escript::SO_PACKAGE_UMFPACK:
439                return PASO_UMFPACK;
440    
441            case escript::SO_METHOD_BICGSTAB:
442                return PASO_BICGSTAB;
443            case escript::SO_METHOD_CGS:
444                return PASO_CGS;
445            case escript::SO_METHOD_CHOLEVSKY:
446                return PASO_CHOLEVSKY;
447            case escript::SO_METHOD_CR:
448                return PASO_CR;
449            case escript::SO_METHOD_DIRECT:
450                return PASO_DIRECT;
451            case escript::SO_METHOD_GMRES:
452                return PASO_GMRES;
453            case escript::SO_METHOD_ITERATIVE:
454                return PASO_ITERATIVE;
455            case escript::SO_METHOD_MINRES:
456                return PASO_MINRES;
457            case escript::SO_METHOD_NONLINEAR_GMRES:
458                return PASO_NONLINEAR_GMRES;
459            case escript::SO_METHOD_PCG:
460                return PASO_PCG;
461            case escript::SO_METHOD_PRES20:
462                return PASO_PRES20;
463            case escript::SO_METHOD_TFQMR:
464                return PASO_TFQMR;
465    
466            case escript::SO_PRECONDITIONER_AMG:
467                return PASO_AMG;
468            case escript::SO_PRECONDITIONER_AMLI:
469                return PASO_AMLI;
470            case escript::SO_PRECONDITIONER_BOOMERAMG:
471                return PASO_BOOMERAMG;
472            case escript::SO_PRECONDITIONER_GAUSS_SEIDEL:
473                return PASO_GAUSS_SEIDEL;
474            case escript::SO_PRECONDITIONER_ILU0:
475                return PASO_ILU0;
476            case escript::SO_PRECONDITIONER_ILUT:
477                return PASO_ILUT;
478            case escript::SO_PRECONDITIONER_JACOBI:
479                return PASO_JACOBI;
480            case escript::SO_PRECONDITIONER_NONE:
481                return PASO_NO_PRECONDITIONER;
482            case escript::SO_PRECONDITIONER_REC_ILU:
483                return PASO_REC_ILU;
484            case escript::SO_PRECONDITIONER_RILU:
485                return PASO_RILU;
486    
487            case escript::SO_ODESOLVER_BACKWARD_EULER:        
488                return PASO_BACKWARD_EULER;
489            case escript::SO_ODESOLVER_CRANK_NICOLSON:
490                return PASO_CRANK_NICOLSON;
491            case escript::SO_ODESOLVER_LINEAR_CRANK_NICOLSON:
492                return PASO_LINEAR_CRANK_NICOLSON;
493    
494            case escript::SO_INTERPOLATION_CLASSIC:
495                return PASO_CLASSIC_INTERPOLATION;
496            case escript::SO_INTERPOLATION_CLASSIC_WITH_FF_COUPLING:
497                return PASO_CLASSIC_INTERPOLATION_WITH_FF_COUPLING;
498            case escript::SO_INTERPOLATION_DIRECT:
499                return PASO_DIRECT_INTERPOLATION;
500    
501            case escript::SO_COARSENING_AGGREGATION:
502                return PASO_AGGREGATION_COARSENING;
503            case escript::SO_COARSENING_CIJP:
504                return PASO_CIJP_COARSENING;
505            case escript::SO_COARSENING_CIJP_FIXED_RANDOM:
506                return PASO_CIJP_FIXED_RANDOM_COARSENING;
507            case escript::SO_COARSENING_FALGOUT:
508                return PASO_FALGOUT_COARSENING;
509            case escript::SO_COARSENING_HMIS:
510                return PASO_HMIS_COARSENING;
511            case escript::SO_COARSENING_PMIS:
512                return PASO_PMIS_COARSENING;
513            case escript::SO_COARSENING_RUGE_STUEBEN:
514                return PASO_RUGE_STUEBEN_COARSENING;
515            case escript::SO_COARSENING_STANDARD:
516                return PASO_STANDARD_COARSENING;  
517            case escript::SO_COARSENING_YAIR_SHAPIRA:
518                return PASO_YAIR_SHAPIRA_COARSENING;
519    
520            case escript::SO_REORDERING_DEFAULT:
521                return PASO_DEFAULT_REORDERING;
522            case escript::SO_REORDERING_MINIMUM_FILL_IN:
523                return PASO_MINIMUM_FILL_IN;
524            case escript::SO_REORDERING_NESTED_DISSECTION:
525                return PASO_NESTED_DISSECTION;
526            case escript::SO_REORDERING_NONE:
527                return PASO_NO_REORDERING;
528    
529            default:
530                std::stringstream temp;
531                temp << "Error - Cannot map option value "<< escriptOption
532                     << " onto Paso";
533                throw PasoException(temp.str());
534        }
535    }
536    
537    void Options::updateEscriptDiagnostics(bp::object& options) const
538    {
539    #define SET(__key__,__val__,__type__) options.attr("_updateDiagnostics")(__key__,(__type__)__val__)
540       SET("num_iter", num_iter, int);
541       SET("num_level", num_level, int);
542       SET("num_inner_iter", num_inner_iter, int);
543       SET("time", time, double);
544       SET("set_up_time", set_up_time, double);
545       SET("net_time", net_time, double);
546       SET("residual_norm", residual_norm, double);
547       SET("converged", converged, bool);
548       SET("time_step_backtracking_used", time_step_backtracking_used, bool);
549       SET("coarse_level_sparsity", coarse_level_sparsity, double);
550       SET("num_coarse_unknowns", num_coarse_unknowns, int);
551    #undef SET
552    }
553    
554  } // namespace paso  } // namespace paso
555    

Legend:
Removed from v.5932  
changed lines
  Added in v.5933

  ViewVC Help
Powered by ViewVC 1.1.26